【发布时间】:2017-01-31 04:27:49
【问题描述】:
我有一个 Mat 图像,它是我分割的二进制掩码和一个标识特定区域的 cv::Rect。当我得到二进制掩码的轮廓时,图像是这样的:
我想在与矩形相交的区域填充遮罩。我该怎么做?
提前致谢。
【问题讨论】:
我有一个 Mat 图像,它是我分割的二进制掩码和一个标识特定区域的 cv::Rect。当我得到二进制掩码的轮廓时,图像是这样的:
我想在与矩形相交的区域填充遮罩。我该怎么做?
提前致谢。
【问题讨论】:
一个不错的选择是将cv::min() 与二值图像一起使用,另一个cv::Mat() 将cv::Rect() 下的区域涂成白色。它将过滤掉 Rect 下所需的部分:
// Create a grayscale canvas with black background
cv::Mat canvas = cv::Mat(binary_img.size(), CV_8UC1, cv::Scalar(0));
// I created a dummy rect replace it with original rect coordinates.
cv::Rect boundingRect = cv::Rect(100, 100, 200, 200);
// Draw filled rect onto the black canvas with white color
cv::rectangle(binary_image, boundingRect, cv::Scalar(255), -1);
// Take the min of binary image and canvas to filter out the contours
cv::min(binary_image, canvas, binary_image);
编辑:
如果要过滤与cv::Rect 相交的轮廓,则需要遍历每个轮廓,计算 boundingRect 并检查它是否与给定的矩形相交。
for (int i=0; i<contours.size(); i++) {
if ((cv::boundingRect(contours[i]) & boundingRect).area() > 0) {
// Your desired contours found.
}
}
【讨论】: