我从二进制图像中过滤小斑点(面积小于阈值的轮廓)。掩码是二值图像。
如果我评论行
drawContours(mask, contours, -1, Scalar(255), CV_FILLED, 8);
然后当我用 0 个小斑点填充后保存蒙版时,我会得到奇怪的结果。
也不明白为什么取消注释行时它会起作用,因为之后
drawContours(mask, contours, -1, Scalar(255), CV_FILLED, 8);
掩码逻辑上应与输入掩码相同(图像周围的 1 个像素边界除外)
void FilterSmallBlobs(Mat &mask, float minArea)
{
//as side effect this code extends inner holes with 1 pixel border and removes 1 pixels border from image border.
vector<vector<Point>> contours;
//findContours(mask, contours, CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE);
findContours(mask, contours, CV_RETR_LIST, CV_CHAIN_APPROX_NONE);
vector<vector<Point>> badContours; //contours to erase
for (int i = 0; i < (int)contours.size(); i++)
{
if(contourArea(contours[i]) <= minArea)
badContours.push_back(contours[i]);
}
//drawContours(mask, contours, -1, Scalar(255), CV_FILLED, 8);
drawContours(mask, badContours, -1, Scalar(0), CV_FILLED, 8);
}
我想要的是
所以我不明白当我填充坏轮廓时,drawContours 是否会破坏初始蒙版?