在 C++ 的 OpenCV 中进行几何图形绘制 ,主要依赖于 cv::line
、cv::rectangle
、cv::circle
、cv::ellipse
、cv::polylines
等函数。这些函数常用于图像标注、目标检测可视化、图形学习等任务。
下面是几何图形绘制的基本引入和说明:首先,需要创建画布,也可以直接在一张图片上画。
cv::Mat img = cv::Mat::zeros(500, 500, CV_8UC3); // 创建一个黑色背景的图像(500×500)
下面是图形函数及其参数的介绍:
1.直线
cv::line(img, cv::Point(50, 50), cv::Point(200, 50), cv::Scalar(255, 0, 0), 2);
参数名 | 类型 | 说明 |
---|---|---|
img |
cv::Mat& |
要绘制的图像(画布) |
pt1 |
cv::Point |
线段的起点坐标(如 cv::Point(x1, y1) ) |
pt2 |
cv::Point |
线段的终点坐标(如 cv::Point(x2, y2) ) |
color |
cv::Scalar |
线段的颜色(格式为 BGR,如红色为 cv::Scalar(0, 0, 255) ) |
thickness |
int |
线条宽度(默认为 1,设为 -1 无意义) |
lineType |
int |
线条类型(如下) |
shift |
int |
坐标小数位数(默认 0,一般不用动,除非你使用亚像素坐标) |
2.矩形
cv::rectangle(img, cv::Point(100, 100), cv::Point(300, 200), cv::Scalar(0, 255, 0), 3);
参数名 | 类型 | 说明 |
---|---|---|
img |
cv::Mat& |
要绘制的图像(画布) |
pt1 |
cv::Point |
矩形的左上角坐标(起点) |
pt2 |
cv::Point |
矩形的右下角坐标(终点) |
color |
cv::Scalar |
矩形边框颜色(BGR格式,例如红色为 cv::Scalar(0,0,255) ) |
thickness |
int |
线宽,默认为 1;设为 -1 表示填充矩形 |
lineType |
int |
线型(cv::LINE_8 、cv::LINE_4 、cv::LINE_AA ) |
shift |
int |
坐标精度,小数点位数,默认 0 |
3.圆形
cv::circle(img, cv::Point(250, 250), 50, cv::Scalar(0, 0, 255), -1); // 填充圆
参数名 | 类型 | 说明 |
---|---|---|
img |
cv::Mat& |
目标图像(画布) |
center |
cv::Point |
圆心坐标(如 cv::Point(x, y) ) |
radius |
int |
圆的半径(像素) |
color |
cv::Scalar |
圆的颜色(BGR 格式,如红色为 Scalar(0, 0, 255) ) |
thickness |
int |
线宽,默认 1;如果设为 -1 ,表示绘制实心圆 |
lineType |
int |
线型,如 cv::LINE_8 、cv::LINE_AA (抗锯齿) |
shift |
int |
圆心坐标和半径的小数位数(用于亚像素绘图,默认 0) |
4.椭圆
cv::ellipse(img, cv::Point(250, 250), cv::Size(100, 50), 45, 0, 360, cv::Scalar(255, 255, 0), 2);
参数名 | 类型 | 说明 |
---|---|---|
img |
cv::Mat& |
要绘制的图像(画布) |
center |
cv::Point |
椭圆中心点坐标 |
axes |
cv::Size |
半轴长度,Size(a, b) 表示长轴为 2a,短轴为 2b |
angle |
double |
椭圆的旋转角度(绕中心逆时针,单位为度) |
startAngle |
double |
起始角度(相对于旋转后的 x 轴,单位为度) |
endAngle |
double |
结束角度 |
color |
cv::Scalar |
颜色(BGR格式) |
thickness |
int |
线宽,默认为 1,设置为 -1 表示填充 |
lineType |
int |
线型(cv::LINE_8 , cv::LINE_AA 等) |
shift |
int |
坐标精度(默认 0,单位像素) |
绘制矩形,可以直接定义一个矩形,再设定其xy坐标,宽以及高,那么只需要将这个矩形给函数即可:
Rect rect;
rect.x = 200;
rect.y = 100;
rect.width = 300;
rect.height = 300;
rectangle(image,rect,Scalar(0,255,0),5,LINE_4);
rectangle函数中的5为线宽,该参数如果小于0,一般为-1,那么绘制的矩形为填充效果,大于0极为设置线宽。
同样椭圆也是如此:
RotatedRect rrt;
rrt.center = Point(200,200);
rrt.size = Size(200,300);
rrt.angle = 90;
ellipse(image,rrt,Scalar(200,0,0),4,LINE_4);

剩下的图形可自己实现,当作练习;
