使用OpenCV(Python)找到具有最大封闭区域的轮廓
Posted
技术标签:
【中文标题】使用OpenCV(Python)找到具有最大封闭区域的轮廓【英文标题】:Find the contour with largest enclosing area using OpenCV (Python) 【发布时间】:2016-05-19 18:09:43 【问题描述】:我有一个图像Original Image,我想找到包围图像中框的轮廓。这样做的原因是我想将图像裁剪到边界框,然后对裁剪后的图像进行进一步的图像处理。
我尝试检测 Canny 边缘,但它们似乎没有按照我的意愿连接。附件是精明边缘外观的图像。 Canny edges
gray = img[:,:,1]
blurred = cv2.GaussianBlur(gray, (5, 5), 0)
edged = cv2.Canny(blurred, 20, 60)
从原始图像中找到边界框的最佳方法是什么?
非常感谢。
如果可能的话,请告诉我如何使这个问题更清楚!
【问题讨论】:
【参考方案1】:我假设以下内容:(如果不是这种情况,您应该在问题中指定此类内容) 你知道盒子的大小 大小始终相同 视角总是一样的 盒子总是完全在视野范围内 盒子没有旋转
在图像上使用几条扫描线来查找从黑色背景到框的过渡(在 x 和 y 中) 超出阈值、最大梯度或任何最适合您的方式。
丢弃异常值,使用最小和最大坐标将固定大小的 ROI 定位在您的框上。
还有很多其他方法可以找到固定 ROI 的中心位置,例如
阈值,距离变换,最大值
或
阈值、blob 搜索、质心/轮廓
你也可以做一些轮廓匹配。
我建议您改进设置,使背景照明不超过框边框(左/右优于顶部/底部)。然后一切变得容易。
顺便说一句,您的边缘图像看起来很糟糕。检查其他方法或改进您的 Canny 参数。
【讨论】:
以上是关于使用OpenCV(Python)找到具有最大封闭区域的轮廓的主要内容,如果未能解决你的问题,请参考以下文章
如何将轮廓层次结构从 python openCV 转换为 emgu cv 以查找封闭轮廓