从openCV中的boundingRect创建一个掩码

时间:2014-04-05 01:07:58

标签: opencv

假设我根据某些点给出了一个boundingRect并将其存储到Rect对象中。

如何在openCV中使用这些点并创建掩码?也就是说,边界矩形之外的所有内容都被屏蔽(或设置为白色)

我已经尝试了几种不同的方法,并且能够使用convexHull使用多边形填充它,但似乎无法使它与boundingRect一起使用

2 个答案:

答案 0 :(得分:3)

您可以通过传递边界Rect的四个端点来调用fillConvexPoly()

// assume all four end points are stored in "vector<Point> roi_vertices" already
// the order of the vertices don't matter

Mat mask = Mat(height, width, CV_8UC1, Scalar(0));

// Create Polygon from vertices
vector<Point> roi_poly;
approxPolyDP(roi_vertices, roi_poly, 1.0, true);

// Fill polygon white
fillConvexPoly(mask, &roi_poly[0], (int)roi_poly.size(), 255, 8, 0);

P.S。:上述方法也适用于为任何(凸)多边形生成蒙版。

答案 1 :(得分:0)

使用CV_FILLED选项绘制矩形并将其反转,如

Rect boundRect(x,y,W,H);
Mat mask(rows,cols,CV_8UC1,Scalar(0));
rectangle(mask,boundRect,Scalar(255),CV_FILLED,8,0);
bitwise_not(mask,mask);

或以其他方式不使用反转,只需创建一个白色图像,然后使用CV_FILLED选项但使用黑色(标量(0))绘制矩形。

那是

Rect boundRect(x,y,W,H);
Mat mask(rows,cols,CV_8UC1,Scalar(255));
rectangle(mask,boundRect,Scalar(255),CV_FILLED,8,0);