opencv(C++) 如何在轮廓的最大外接矩形的外侧画一个更大的矩形

这是一个非常有趣的问题,搜了一下居然没发现有相关的博客,只能自己写了哎。这里也涉及到一个我还没有解决的疑问,直接上代码吧。

在轮廓的最大外接矩形外侧画一个更大的矩形

//输入图像是img

//轮廓检测
vector<vector<Point>> contours;   //轮廓
vector<Vec4i> hieracrchy;    //轮廓结构
findContours(dilate_dst, contours, hieracrchy, 3, 2, Point());   //检测最外围轮廓

for (int i = 0; i < contours.size(); i++)
{
	Rect rect = boundingRect(contours[i]);    //最大外接矩形
	//在最大外接矩形的外侧画一个更大一点的红色矩形框
	//rect是Rect类的一个对象,因此可以调用rect.x和rect.height等参数
	int x = rect.x - 3;    //更大矩形左上角顶点的x坐标
	int y = rect.y - 3;    //y坐标
	int height = rect.height + 6;    //高
	int width = rect.width + 6;      //宽
	rectangle(img, Point(x, y), Point(x + width, y + height), Scalar(0, 0, 255), 2);    //用左上和右下两个顶点坐标画矩形
}

opencv 画矩形有两种方法

// 一、用矩形两个对角点坐标画
void cv::rectangle(InputOutputArray img,  //输入和输出的图像
				Point pt1,      //矩形的一个顶点
				Point pt2,      //pt1的对角点
				const Scaler &color,   //矩形框颜色
				int thickness=1)       //矩形框宽度

// 二、用矩形左上角顶点和矩形的宽、高画
Rect rect=(x,y,width,height)    //左上角顶点的x、y坐标,矩形的宽、高
void cv::rectangle(InputOutputArray img,  //输入和输出的图像
				Rect rect,      //矩形
				const Scaler &color,   //矩形框颜色
				int thickness=1)       //矩形框宽度

报错

我用的是第一种方法,即用两个对角顶点画矩形。因为用第二种方法报错:

不存在从 ”int“ 转换到 “cv::Rect_" 的适当构造函数

代码如下,在第二行报错,大概就是说 rect.x-3 是int型,不能转换为 cv::Rect_ ,没搞懂,希望如果有大佬看到的话能指导一下。

Rect rect = boundingRect(contours[i]); //最大外接矩形
Rect re_rect = (rect.x - 3, rect.y - 3, rect.height + 6, rect.width + 6);

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ctrl A_ctrl C_ctrl V

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值