在 OpenCV 中绘制矩形

Posted

技术标签:

【中文标题】在 OpenCV 中绘制矩形【英文标题】:Draw rectangle in OpenCV 【发布时间】:2016-10-19 01:02:54 【问题描述】:

我想用这个函数在 OpenCV 中画一个矩形:

rectangle(Mat& img, Rect rec, const Scalar& color, int thickness=1, int lineType=8, int shift=0 )

但是当我使用它时,我遇到了一些错误。我的问题是:任何人都可以用一个例子来解释这个功能吗?我找到了一些例子,但有另一个功能:

rectangle(Mat& img, Point pt1, Point pt2, const Scalar& color, int thickness=1, int lineType=8, int shift=0)

本例关于第二个功能:

rectangle(image, pt2, pt1, Scalar(0, 255, 0), 2, 8, 0);

我理解这个函数,但是对于第一个函数,我在参数Rect 中遇到了问题。我不知道我怎样才能让它更致命?

【问题讨论】:

【参考方案1】:

接受两个cv::Pointcv::rectangle 函数采用矩形的左上角和右下角(documentation 中分别为pt1 和pt2)。如果该矩形与接受cv::Rectcv::rectangle 函数一起使用,那么您将得到相同的结果。

// just some valid rectangle arguments
int x = 0;
int y = 0;
int width = 10;
int height = 20;
// our rectangle...
cv::Rect rect(x, y, width, height);
// and its top left corner...
cv::Point pt1(x, y);
// and its bottom right corner.
cv::Point pt2(x + width, y + height);
// These two calls...
cv::rectangle(img, pt1, pt2, cv::Scalar(0, 255, 0));
// essentially do the same thing
cv::rectangle(img, rect, cv::Scalar(0, 255, 0))

【讨论】:

我按照你给我的例子做了,但函数没有在图像上绘制矩形,而是在角落绘制。要不要我加入我的代码看看 如上图所示,矩形的左上角是图像的左上角。也许您可以以某种方式发布您正在使用的图片或显示出了什么问题? /* 全局变量 */ CascadeClassifier walks_cascade;垫图像1;诠释 x = 0;整数 y = 0;诠释 w = 10;整数 h = 20; int main( ) // 加载人脸级联(.xml 文件) walkers_cascade = CascadeClassifier("hogcascade_pedestrians.xml"); // 读取图像 image5 = imread("ped5.jpg");矩形矩形(x,y,w,h); std::vector faces1; walkers_cascade.detectMultiScale(image1, faces1, 1.1, 2, 0|CASCADE_SCALE_IMAGE, Size(30, 30) );矩形(image1, rect, cv::Scalar(0, 255, 0)); imshow("Window1", image1);等待键(0);返回0; 是的,看起来不错,但是矩形的那些值可能不是您想要的。尝试使用 x、y、宽度和高度的值。 我怎样才能得到我想要的值【参考方案2】:

这是一个在图像上绘制预定义矩形的简单示例

using namespace cv;

int main()
Mat img=imread("myImage.jpg");

Rect r=Rect(10,20,40,60);
//create a Rect with top-left vertex at (10,20), of width 40 and height 60 pixels.

rectangle(img,r,Scalar(255,0,0),1,8,0);
//draw the rect defined by r with line thickness 1 and Blue color

imwrite("myImageWithRect.jpg",img);


return 0;

【讨论】:

例如,谢谢,但是如何在图像上绘制矩形。 我有图像,我想用那个函数在上面画一个矩形 这是一个演示 Rect(x,y,w,h) 对象的示例。 rectangle() 函数用于在图像上绘制矩形。如果您已经有一张图片,那么您可以使用如上所示的 rectangle() 调用在其上绘制一个矩形 你能看看我自己的代码,它在你的帖子上方。

以上是关于在 OpenCV 中绘制矩形的主要内容,如果未能解决你的问题,请参考以下文章

在 OpenCV 中绘制有角度的矩形

OpenCV 例程200篇211. 绘制垂直矩形

在python中的openCV中绘制一个旋转的框

OpenCV 例程200篇212. 绘制倾斜的矩形

OpenCV 例程200篇212. 绘制倾斜的矩形

如何使用opencv在鱼眼校正图像中绘制内接矩形?