假设我根据某些点给出了一个boundingRect并将其存储到Rect对象中。
如何在openCV中使用这些点并创建掩码?也就是说,边界矩形之外的所有内容都被屏蔽(或设置为白色)
我已经尝试了几种不同的方法,并且能够使用convexHull使用多边形填充它,但似乎无法使它与boundingRect一起使用
答案 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);