image - 如何找到检测到的 Blob /对象重叠以及如何将其分组?

标签 image opencv image-processing rectangles overlapping

如何找到检测到的 Blob /对象重叠以及如何将其分组? 例如,我有标记的 blob 坐标。

** 检测到的 BLOBS 数量 - 5 ** 我的 Blob 坐标如下:

起始 X ,起始 Y - Blob 宽度 - Blob 高度

100 100  100 100
125 125  80  90
80  80   70  50
130 130  10  10

10 10 5 8 

-- 如何找到重叠的对象/矩形? -- 如何分组?

** 我们的结果应该是 **** **检测到 2 个 Blob - 2 **

80 80 205 210
10 10 5 8 

如何实现??

最佳答案

如果我没理解错的话,你的 blob 可以被视为 cv::Rect(StartingX,StartingY, BlobWidth, BlobHeight)

在 opencv c++ 中,检查这样的 Rect 是否重叠很容易:rectA & rectB = rectOverlap 其中 rectOverlap 是两个 rect 覆盖的 rect 区域,所以如果 rectOverlap 有 .width > 0c.height > 0 然后 blob/rects 重叠。

这里是创建一些矩形并计算它们是否重叠的示例代码:

int main()
{
cv::Mat sample = cv::Mat(512,512,CV_8UC3, cv::Scalar(0,0,0));

// create sample rectangles: positionsX, positionY, width, height
cv::Rect rectA(100,50,50,200);
cv::Rect rectB(50,100,200,50);
cv::Rect rectC(400,50,100,100);

// draw in different colors:
cv::rectangle(sample, rectA, cv::Scalar(0,0,255));
cv::rectangle(sample, rectB, cv::Scalar(255,0,0));
cv::rectangle(sample, rectC, cv::Scalar(0,255,0));

// create output
cv::Mat result = cv::Mat(512,512,CV_8UC3, cv::Scalar(0,0,0));

// compute overlap with overloaded & operator for cv::Rect
cv::Rect overlapAB = rectA & rectB;
cv::Rect overlapAC = rectA & rectC;

// test for overlap and draw or terminal output
if(overlapAB.width && overlapAB.height) cv::rectangle(result, overlapAB, cv::Scalar(255,0,255), -1);
else std::cout << " no overlap between rectA and rectB" << std::endl;

if(overlapAC.width && overlapAC.height) cv::rectangle(result, overlapAC, cv::Scalar(0,255,255), -1);
else std::cout << " no overlap between rectA and rectC" << std::endl;


cv::imshow("rects", sample);
cv::imshow("overlap", result);

cv::imwrite("RectOverlapInput.png", sample);
cv::imwrite("RectOverlapOutput.png", result);

cv::waitKey(-1);


}

这里是输入和输出。你可以看到检测到的蓝色和红色矩形的重叠是粉红色矩形。

输入:

enter image description here

输出:rectA 和 rectC 之间没有重叠 和这张图片:

enter image description here

关于image - 如何找到检测到的 Blob /对象重叠以及如何将其分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23365948/

相关文章:

c++ - 无法在函数内部为 cv::Mat 赋值

python - opencv、BGR2HSV 会产生大量伪影

matlab - 从2D图像获取深度图像

Android OpenCV - 闭眼检测

c++ - visual studio 2010 错误/堆损坏

python - 使用 OpenCV 2.4.10 和 Python 2.7.10 的 imresize 错误

php - 如何使用 FACEBOOK API 获取 facebook 中的所有组图像

image - 将UIimage(拍照)转成NSData

css - 使用 data-bg-img 修复图像不显示 Laravel

java - 动态弹出菜单 Android Studio