常用函数简介
OpenCV 中用于绘制不同图形的 C++ 函数的简要介绍:
-
绘制矩形框:
cv::rectangle(image, cv::Point pt1, cv::Point pt2, cv::Scalar color, int thickness);
-
image
:目标图像 -
pt1
和pt2
:矩形的对角线顶点坐标 -
color
:矩形的颜色 -
thickness
:线条的粗细,如果为负数,表示填充矩形
-
-
绘制文字:
cv::putText(image, text, cv::Point org, int fontFace, double fontScale, cv::Scalar color, int thickness);
-
image
:目标图像 -
text
:要绘制的文本 -
org
:文本的起始坐标 -
fontFace
:字体类型 -
fontScale
:字体缩放因子 -
color
:文本颜色 -
thickness
:线条的粗细
-
-
绘制圆:
cv::circle(image, cv::Point center, int radius, cv::Scalar color, int thickness);
-
image
:目标图像 -
center
:圆心坐标 -
radius
:半径 -
color
:圆的颜色 -
thickness
:线条的粗细,如果为负数,表示填充圆
-
-
绘制椭圆:
cv::ellipse(image, cv::Point center, cv::Size axes, double angle, double startAngle, double endAngle, cv::Scalar color, int thickness);
-
image
:目标图像 -
center
:椭圆中心坐标 -
axes
:长轴和短轴的大小 -
angle
:椭圆旋转角度 -
startAngle
和endAngle
:椭圆的起始和结束角度 -
color
:椭圆的颜色 -
thickness
:线条的粗细,如果为负数,表示填充椭圆
-
-
绘制线段:
cv::line(image, cv::Point pt1, cv::Point pt2, cv::Scalar color, int thickness);
-
image
:目标图像 -
pt1
和pt2
:线段的起点和终点坐标 -
color
:线段的颜色 -
thickness
:线条的粗细
-
-
绘制多边形:
cv::polylines(image, std::vector<std::vector<cv::Point>> contours, bool isClosed, cv::Scalar color, int thickness);
-
image
:目标图像 -
contours
:多边形的顶点坐标 -
isClosed
:是否封闭多边形 -
color
:多边形的颜色 -
thickness
:线条的粗细
-
-
绘制填充多边形:
cv::fillPoly(image, std::vector<std::vector<cv::Point>> contours, cv::Scalar color);
-
image
:目标图像 -
contours
:多边形的顶点坐标 -
color
:填充颜色
-
-
绘制箭头:
cv::arrowedLine(image, cv::Point pt1, cv::Point pt2, cv::Scalar color, int thickness, int line_type, int tipLength);
-
image
:目标图像 -
pt1
和pt2
:箭头的起点和终点坐标 -
color
:箭头的颜色 -
thickness
:线条的粗细 -
line_type
:线条的类型 -
tipLength
:箭头的尖端长度
-
测试例子
在C++中使用OpenCV库可以轻松实现在图像上绘制矩形框、文字、圆、椭圆、线段、多边形等各种图形和操作。以下是一些示例代码来演示如何在图像上执行这些操作:文章来源:https://www.toymoban.com/news/detail-741923.html
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
int main() {
// 创建一个空白图像
cv::Mat image = cv::Mat::zeros(400, 400, CV_8UC3);
// 在图像上绘制矩形框
cv::rectangle(image, cv::Point(50, 50), cv::Point(150, 150), cv::Scalar(0, 0, 255), 2);
// 在图像上绘制文字
cv::putText(image, "OpenCV", cv::Point(160, 180), cv::FONT_HERSHEY_SIMPLEX, 1, cv::Scalar(255, 255, 255), 2);
// 在图像上绘制圆
cv::circle(image, cv::Point(200, 200), 50, cv::Scalar(0, 255, 0), 2);
// 在图像上绘制椭圆
cv::ellipse(image, cv::Point(300, 300), cv::Size(60, 40), 45, 0, 360, cv::Scalar(255, 0, 0), 2);
// 在图像上绘制线段
cv::line(image, cv::Point(50, 200), cv::Point(150, 300), cv::Scalar(255, 0, 255), 2);
// 在图像上绘制多边形(五角星)
std::vector<cv::Point> star_points;
star_points.push_back(cv::Point(250, 50));
star_points.push_back(cv::Point(265, 100));
star_points.push_back(cv::Point(305, 100));
star_points.push_back(cv::Point(280, 130));
star_points.push_back(cv::Point(295, 175));
star_points.push_back(cv::Point(250, 150));
star_points.push_back(cv::Point(205, 175));
star_points.push_back(cv::Point(220, 130));
star_points.push_back(cv::Point(195, 100));
star_points.push_back(cv::Point(235, 100));
cv::polylines(image, star_points, true, cv::Scalar(255, 255, 0), 2);
// 在图像上绘制贝叶斯曲线
cv::Mat curve_image = cv::Mat::zeros(400, 400, CV_8UC3);
std::vector<cv::Point> curve_points;
for (int x = 0; x < curve_image.cols; x++) {
int y = 200 - static_cast<int>(50 * sin(x * 0.05));
curve_points.push_back(cv::Point(x, y));
}
cv::polylines(curve_image, curve_points, false, cv::Scalar(0, 255, 255), 2);
// 创建一个子图,将子图绘制到图片上
// 创建子图像(ROI)
cv::Rect roi_rect(100, 100, 200, 150); // 在(100, 100)位置创建一个200x150的子图像
cv::Mat roi = image(roi_rect);
// 在子图像上绘制一个矩形
cv::rectangle(roi, cv::Point(20, 20), cv::Point(180, 130), cv::Scalar(0, 0, 255), 2);
// 在子图像上绘制文字
cv::putText(roi, "Subimage", cv::Point(40, 40), cv::FONT_HERSHEY_SIMPLEX, 1, cv::Scalar(255, 255, 255), 2);
// 显示图像
cv::imshow("Shapes", image);
cv::imshow("Sin Curve", curve_image);
// 等待按键
cv::waitKey(0);
return 0;
}
上述示例代码创建了一个400x400的空白图像,然后在图像上绘制矩形框、文字、圆、椭圆、线段和多边形(五角星),以及一个sin曲线 子图。您可以根据需要修改图形的位置、颜色、大小等参数。请确保您的C++项目中已正确包含OpenCV库并已配置编译环境。文章来源地址https://www.toymoban.com/news/detail-741923.html
到了这里,关于opencv中绘制图像的函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!