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
);

参数说明:

  1. img:指定绘制矩形的图像,通常是通过 cv::Mat 对象表示。该图像会被直接修改,因此必须是可写的(非常量)。

  2. pt1:矩形左上角的坐标,以 (x, y) 表示。该点定义了矩形的一个顶点。

  3. pt2:矩形右下角的坐标,以 (x, y) 表示。与 pt1 一起定义了矩形的大小和位置。

  4. color:矩形的颜色,由 BGR 或 BGRA 值构成(如:Scalar(255, 0, 0) 表示蓝色)。Scalar 类可以接受 1 到 4 个参数,对应图像的通道数(3 或 4)。

  5. thickness(可选):矩形边框的厚度,单位是像素。默认值1,若设置为负数(通常为 -1),则绘制实心矩形,填充矩形内部。

  6. lineType(可选)

    • 默认值:cv::LINE_8
    • 线条类型,可选项有:
      • cv::LINE_8(默认值):8 连通线条(较常用)
      • cv::LINE_4:4 连通线条
      • cv::LINE_AA:抗锯齿线条,适用于需要平滑边缘的情况
  7. shift(可选):坐标的小数位精度,默认值 0 表示无精度位,若为 1pt1pt2 的坐标均乘以 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. 应用场景

  1. 标记 ROI:可以使用矩形标记感兴趣区域(Region of Interest),比如目标物体的边框、检测区域等。
  2. 结合检测模型:在图像上标出检测到的物体边框,比如人脸检测、物体检测等。
  3. 填充矩形:设置 thickness = -1 时会填充矩形,可以用来遮挡图像的某些区域,或为注释区域添加背景。


4. 注意事项

  • 如果 pt1pt2 超出图像边界,OpenCV 会自动裁剪矩形以适应图像大小,但在程序设计时尽量确保坐标在图像范围内。
  • lineType 设置为 cv::LINE_AA,矩形边缘会更平滑,但对性能略有影响,因此一般用于需要高质量边缘的图像处理。

通过 cv::rectangle(),可以灵活地在图像上标注、绘制边框,应用广泛且性能优异。



posted @ 2024-10-31 13:23  做梦当财神  阅读(110)  评论(0编辑  收藏  举报