假设我被赋予了一个基于某些点的 boundingRect,并将其存储到 Rect 对象中。
如何使用这些点并在 openCV 中创建掩码? 也就是说,边框之外的所有内容都被遮罩(或设置为白色)
我已经尝试了几种不同的方法,并且能够使用凸体和多边形填充来使其工作,但似乎无法使其与 boundingRect 一起使用
您可以通过
传递边界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);
PS:上述方法也适用于为任何(凸)多边形生成蒙版。
使用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选项绘制矩形,但使用黑色(Scalar(0))。
那是
Rect boundRect(x,y,W,H);
Mat mask(rows,cols,CV_8UC1,Scalar(255));
rectangle(mask,boundRect,Scalar(255),CV_FILLED,8,0);