在我的图像处理项目中,我已经使用cv.findContours
函数获得了一幅蒙版图像(白色图像)及其轮廓。现在我的目标是创建一个算法,可以绘制出该轮廓的中间线。蒙版图像及其轮廓如下图所示。
屏蔽的图像:
轮廓:
在我的想象中,我想为那个轮廓创建一条接近水平的中间线。我已经用红色手动标记了我理想的中间线。请检查下图中我提到的红色中间线。
带中线的轮廓:
值得注意的是,我的最终目标是找到我用黄色标记的尖点。如果你有其他可以直接找到黄色尖点的想法,也请告诉我。为了找到黄色尖点,我尝试了cv.convexHull
和cv.minAreaRect
两种方法。但问题是鲁棒性。2我使这两种方法对一些图像有效,但对我的数据集中的其他一些图像,它们就不太有效了。3因此,我认为找到中间线可能是一个很好的方法,我可以尝试。
4条答案
按热度按时间wnavrhmk1#
我相信你正在尝试确定轮廓的重心和方向。我们可以很容易地使用中心矩来完成这一点。更多信息在这里。
下面的代码生成this plot。这是您想要的结果吗?
kzipqqlq2#
我现在的目标是创建一个算法,可以画出这个轮廓的中间线。
如果检测到水平线的上下限,则可以计算中线坐标。
例如:
中线为:
如果将大小更改为图像的宽度:
编码:
hiz5n14c3#
我相信 backbone 是你要找的。
如果边缘稍微平滑一点
实际上,线不会燃烧黄点,因为算法必须检查与边缘的距离,黄点位于边缘上。
nuypyhwy4#
下面是另一种方法,通过在Python/OpenCV中计算围绕对象旋转的边界框的中心线。
输入:
结果: