首页 > 编程笔记 > C++笔记 阅读:27

OpenCV rectangle():画矩形(附带实例)

全局函数 rectangle() 通过对角线上的两个顶点绘制矩形,该函数声明如下:
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,  const Scalar & color, int  thickness=1,  int  lineType = LINE_8, int  shift = 0)

下面来看一个例子,绘制一个医院的红十字:
1) 打开 Qt Creator,新建一个控制台工程,工程名是 test。

2) 在 IDE 中打开 main.cpp,输入如下代码:
#include <iostream>
#include <opencv2/imgproc/types_c.h> // for CV_RGB2GRAY
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
using namespace std;
using namespace cv;

int main()
{
    Mat image3 = Mat::zeros(120, 120, CV_8UC3); // 生成全零矩阵
    Rect rec1 = Rect(10, 30, 60, 20);           // 定义矩形对象,左上角坐标是(10,30),宽度是60,高度是20
    Rect rec2 = Rect(30, 10, 20, 60);           // 定义矩形对象,左上角坐标是(30,10),宽度是20,高度是60
    rectangle(image3, rec1, Scalar(0, 0, 255), -1, 8, 0);  // 在 image3 上画横矩形
    rectangle(image3, rec2, Scalar(0, 0, 255), -1, 8, 0);  // 在 image3 上画竖矩形
    rectangle(image3, Point(10, 30), Point(70, 50), Scalar(0, 255, 255), 2, 8, 0);  // 黄色矩形镶边
    rectangle(image3, Point(30, 10), Point(50, 70), Scalar(0, 255, 255), 2, 8, 0);  // 黄色矩形镶边
    rectangle(image3, Point(30, 30), Point(50, 50), Scalar(0, 0, 255), 3, 8);  // 红色正方形覆盖(中央)
    imshow("Red cross", image3);
    waitKey();
    return 0;
}
在上述代码中,首先创建了一个 Mat 矩阵对象 image3,并且是全黑的。然后定义了两个矩形对象 rec1 和 rec2,分别表示红十字的横矩形和竖矩形,接着调用画矩形的函数 rectangle() 进行绘制,这两个矩形使用颜色填充,因为倒数第三个参数是 -1。最后又画了两个矩形(这次没有填充,是画的矩形边),黄色镶边。

3) 保存工程并运行,结果如下图所示:

相关文章