首页 > 解决方案 > OPENCV:添加一个更大的矩形来计数矩形

问题描述

我有这张图片,下面的代码我已经获得了这个https://drive.google.com/file/d/16cg2RcJlrr7b3Z9HazApLo-HYubw2F6M/view?usp=sharing

contours = cv2.findContours(gray.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
contours = contours[0] if len(contours) == 2 else contours[1]
for c in contours:
    area = cv2.contourArea(c)
    if area > 500:
        x,y,w,h = cv2.boundingRect(c)
        cv2.rectangle(img, (x, y), (x + w, y + h), (36,255,12), 2)
        cv2.drawContours(img, [c], 0, (0,255,0), -1)
        #cv2.drawContours(filled_after, [c], 0, (0,255,0), -1)

现在我想从左上角到右下角添加一个更大的矩形,它将包含闭合的矩形。这是我的预期输出:https ://drive.google.com/file/d/10Cd8sE6SeY-kpiRnsafNSIOJWXs773L5/view?usp=sharing

我已经尝试过 cv2.convexHull 但这不是我想要的。

没有任何计数的原始图像:https ://drive.google.com/file/d/1BGFlW5gLmAi9o1FkevZZzZaDmhYfHKVo/view?usp=sharing

你能帮忙吗?

标签: pythonopencvcomputer-vision

解决方案


这取决于您希望两条分开的线变成一条的距离有多近。

如果它像图像中那样接近,我认为在 findContours 之前稍微模糊一下图像就可以了。

但是,如果您希望将两条相距很远的分离线组合在一起并且模糊不够,您可以尝试 NMSBoxes在 cv2.dnn 中寻找类似的东西。您基本上给出了您在图像中绘制的所有框,如果它们根据您给定的阈值足够接近,该方法将尝试对它们进行分组。


推荐阅读