这是一个非常有趣的问题,搜了一下居然没发现有相关的博客,只能自己写了哎。这里也涉及到一个我还没有解决的疑问,直接上代码吧。
在轮廓的最大外接矩形外侧画一个更大的矩形
//输入图像是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);