Opencv中文网

画矩形rectangle()函数

rectangle() 是 OpenCV 中用于在图像上绘制矩形的基本函数。它既可以通过定义两个顶点(左上角和右下角)绘制,还可以根据Rect进行绘制。下面是它的原型。

void cv::rectangle(
    InputOutputArray img,         // 输入输出图像
    Point pt1,                    // 矩形的一个顶点(通常为左上角)
    Point pt2,                    // 对角的另一个顶点(通常为右下角)
    const Scalar& color,          // 矩形颜色
    int thickness = 1,            // 线宽(或填充)
    int lineType = LINE_8,        // 线型
    int shift = 0                 // 坐标点小数位数
);

void cv::rectangle(
    InputOutputArray img,         // 输入输出图像
    Rect rec,                     // Rect对象定义矩形
    const Scalar& color,          // 矩形颜色
    int thickness = 1,            // 线宽(或填充)
    int lineType = LINE_8,        // 线型
    int shift = 0                 // 坐标点小数位数
);

下面通过实际案例演示其用法。

#include<opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;

int main()
{
    Mat girl = imread("images/girl.jpg", IMREAD_COLOR);//3通道(CV_8UC3)
    if (girl.empty()) {
        return 0;
    }
    imshow("girl", girl);//显示图像

    Scalar color(0, 0, 255);// 线条颜色
    int thickness = 1;// 线宽
    int lineType = LINE_8;// 线型

    // 使用两个点画红色矩形边框
    rectangle(girl,
        Point(390, 90),     //左上角
        Point(490, 320),    //右下角
        Scalar(0, 0, 255),  // BGR格式的红色
        1);                 // 线宽1像素

    // 使用Rect画绿色填充矩形
    cv::rectangle(girl,
        cv::Rect(90, 90, 100, 230),
        cv::Scalar(0, 255, 0),
        cv::FILLED);    // 填充绿色

    imshow("girl2", girl);
    imwrite("girl2.jpg", girl);
    waitKey(0);//等待按键
    return 0;
}

在上述代码中,首先加载一个3通道8位图,如下所示。

原图

然后用了两种方式在原图中画矩形,另外,填充的方式也用了两种。最终效果如下所示。

最终效果

rectangle()函数在图像识别时用于标出结果非常方便,经常使用。常用于绘制目标检测框。如果采用两个Point点来绘制矩形,这两个点的顺序可以是左上到右下或右下到左上,无特定要求。当thickness = -1 或 cv::FILLED表示填充矩形。LINE_AA在斜边上效果更好但性能稍差。

copyright @重庆教主 WPF中文网 联系站长:(QQ)23611316 (微信)movieclip (QQ群).NET小白课堂:864486030 | 本文由WPF中文网原创发布,谢绝转载 渝ICP备2023009518号-1