在图像处理和计算机视觉中,绘制图形是常见的操作之一。这些图形可以用于标记图像中的感兴趣区域(ROI),可视化数据,或者在图像上展示一些重要信息。OpenCV 提供了强大的图形绘制功能,支持绘制矩形、圆形、线条、椭圆等。
示例代码:绘制矩形、圆形、椭圆形、线条
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
void drawing_demo(Mat& image) {
// 1. 绘制矩形
Rect rect;
rect.x = 250; // 矩形左上角的 x 坐标
rect.y = 150; // 矩形左上角的 y 坐标
rect.width = 100; // 矩形的宽度
rect.height = 100; // 矩形的高度
rectangle(image, rect, Scalar(0, 0, 255), 2, 8, 0); // 绘制红色矩形,线宽为 2
// 2. 绘制圆形
circle(image, Point(350, 400), 50, Scalar(255, 0, 0), -1, 8, 0); // 绘制填充的蓝色圆形,半径为 50
// 3. 绘制线条
line(image, Point(100, 100), Point(200, 200), Scalar(255, 255, 0)); // 绘制黄色线条
// 4. 绘制椭圆
RotatedRect rrt;
rrt.center = Point(200, 200); // 椭圆的中心位置
rrt.size = Size(100, 200); // 椭圆的宽度和高度
rrt.angle = 90; // 椭圆的旋转角度
ellipse(image, rrt, Scalar(0, 0, 255), 2, 8); // 绘制红色椭圆,线宽为 2
// 显示图像
imshow("绘图示例", image);
}
int main() {
// 创建一个空白图像(黑色背景)
Mat image = Mat::zeros(Size(500, 500), CV_8UC3);
// 调用绘图函数
drawing_demo(image);
// 等待用户按键
waitKey(0);
destroyAllWindows(); // 关闭所有窗口
return 0;
}
代码解析:
绘制矩形:
类用于定义矩形,包含矩形的左上角坐标
Rect、宽度
(x, y) 和高度
width。
height
:这行代码在图像
rectangle(image, rect, Scalar(0, 0, 255), 2, 8, 0) 上绘制一个矩形。
image 表示矩形的颜色(红色),
Scalar(0, 0, 255) 是线条的宽度,
2 是线条的类型,
8 是连接点的类型(不重要,默认为 0)。
0
绘制圆形:
:这行代码在
circle(image, Point(350, 400), 50, Scalar(255, 0, 0), -1, 8, 0) 位置绘制一个半径为 50 的圆形,颜色为蓝色(
(350, 400)),
Scalar(255, 0, 0) 表示圆形是填充的,
-1 是线条的类型。
8
绘制线条:
:这行代码绘制了一条从
line(image, Point(100, 100), Point(200, 200), Scalar(255, 255, 0)) 到
(100, 100) 的黄色线条。
(200, 200) 表示颜色为黄色。
Scalar(255, 255, 0)
绘制椭圆:
:使用
RotatedRect rrt; 来定义一个旋转矩形,它不仅可以表示矩形,还可以表示椭圆。
RotatedRect
:这行代码绘制了一个红色的椭圆,线条宽度为 2。
ellipse(image, rrt, Scalar(0, 0, 255), 2, 8);
显示图像:
:显示绘制后的图像。
imshow("绘图示例", image);
结果说明:
运行这段代码时,程序将在一个 500×500 的黑色背景上绘制一个红色矩形、一个蓝色圆形、一个黄色线条和一个红色椭圆,最后显示在窗口中。

常见图形的绘制参数:
矩形():
rectangle
参数:
rectangle(image, rect, color, thickness, lineType)
:指定矩形的颜色(BGR 格式)。
color
:矩形边框的线宽。如果是
thickness,则表示填充矩形。
-1
:线条的类型(例如
lineType 为 8-connected、
8 为 4-connected 等)。
4
圆形():
circle
参数:
circle(image, center, radius, color, thickness, lineType)
:圆心坐标。
center
:圆的半径。
radius
:圆的颜色。
color
:线宽(如果是
thickness,则为填充圆)。
-1
线条():
line
参数:
line(image, pt1, pt2, color, thickness, lineType)
和
pt1:线条的起点和终点。
pt2
:线条的颜色。
color
:线条宽度。
thickness
椭圆():
ellipse
参数:
ellipse(image, center, axes, angle, startAngle, endAngle, color, thickness, lineType)
:椭圆的中心。
center
:椭圆的长短轴。
axes
:椭圆的旋转角度。
angle
和
startAngle:椭圆的起始和结束角度。
endAngle
:椭圆的颜色。
color