OpenCV(cv::rectangle())
cv::rectangle()
是 OpenCV 提供的一个函数,用于在图像上绘制矩形。可以通过此函数指定矩形的位置、大小、颜色、边框粗细等,适合在图像处理中标记感兴趣区域(ROI)或绘制边框。以下是对 cv::rectangle()
的详细解析:
1. 函数定义
void cv::rectangle(
cv::InputOutputArray img,
cv::Point pt1,
cv::Point pt2,
const cv::Scalar &color,
int thickness = 1,
int lineType = cv::LINE_8,
int shift = 0
);
参数说明:
-
img
:指定绘制矩形的图像,通常是通过cv::Mat
对象表示。该图像会被直接修改,因此必须是可写的(非常量)。 -
pt1
:矩形左上角的坐标,以(x, y)
表示。该点定义了矩形的一个顶点。 -
pt2
:矩形右下角的坐标,以(x, y)
表示。与pt1
一起定义了矩形的大小和位置。 -
color
:矩形的颜色,由 BGR 或 BGRA 值构成(如:Scalar(255, 0, 0)
表示蓝色)。Scalar
类可以接受 1 到 4 个参数,对应图像的通道数(3 或 4)。 -
thickness
(可选):矩形边框的厚度,单位是像素。默认值1
,若设置为负数(通常为 -1),则绘制实心矩形,填充矩形内部。 -
lineType
(可选)- 默认值:
cv::LINE_8
- 线条类型,可选项有:
cv::LINE_8
(默认值):8 连通线条(较常用)cv::LINE_4
:4 连通线条cv::LINE_AA
:抗锯齿线条,适用于需要平滑边缘的情况
- 默认值:
-
shift
(可选):坐标的小数位精度,默认值0
表示无精度位,若为1
则pt1
和pt2
的坐标均乘以2^1 = 2
以提高精度,依次类推。
2. 示例代码
以下代码在图像上绘制一个红色矩形:
#include <opencv2/opencv.hpp>
int main() {
// 创建一个黑色图像
cv::Mat img = cv::Mat::zeros(400, 400, CV_8UC3);
// 定义矩形左上角和右下角坐标
cv::Point pt1(50, 50);
cv::Point pt2(300, 300);
// 绘制红色矩形,边框厚度为 2 像素
cv::rectangle(img, pt1, pt2, cv::Scalar(0, 0, 255), 2, cv::LINE_8);
// 显示图像
cv::imshow("Rectangle", img);
cv::waitKey(0);
return 0;
}
3. 应用场景
- 标记 ROI:可以使用矩形标记感兴趣区域(Region of Interest),比如目标物体的边框、检测区域等。
- 结合检测模型:在图像上标出检测到的物体边框,比如人脸检测、物体检测等。
- 填充矩形:设置
thickness = -1
时会填充矩形,可以用来遮挡图像的某些区域,或为注释区域添加背景。
4. 注意事项
- 如果
pt1
和pt2
超出图像边界,OpenCV 会自动裁剪矩形以适应图像大小,但在程序设计时尽量确保坐标在图像范围内。 - 若
lineType
设置为cv::LINE_AA
,矩形边缘会更平滑,但对性能略有影响,因此一般用于需要高质量边缘的图像处理。
通过 cv::rectangle()
,可以灵活地在图像上标注、绘制边框,应用广泛且性能优异。