如何使用openCV识别连接组件的最窄部分?
给定这样一个连接的组件: 我想将图像分为两个图像,其中最窄的部分出现,因此输出如下所示: ,, 注意:我已经添加了几个示例(根据要求):。 (一) (二) 结果如下: ,如何使用openCV识别连接组件的最窄部分?,opencv,image-processing,contour,Opencv,Image Processing,Contour,给定这样一个连接的组件: 我想将图像分为两个图像,其中最窄的部分出现,因此输出如下所示: ,, 注意:我已经添加了几个示例(根据要求):。 (一) (二) 结果如下: , ,一种非常普遍且非常稳健的方法是使用侵蚀和流域改造: 使用大小为k的方形核腐蚀二值图像 检查组件的数量。如果部件数量
,一种非常普遍且非常稳健的方法是使用侵蚀和流域改造:
对于代码参考,您可能需要查看。它们有一个与您自己的应用程序非常相似的用例。一个真正通用且非常健壮的方法是使用侵蚀和流域转换:
对于代码参考,您可能需要查看。它们的用例与您自己的应用程序非常相似。垂直投影直方图。对于每列,求和1表示白色像素,求和0表示黑色像素。您会发现“最窄”部分的值大于0,但低于较大的部分parts@Miki这仅适用于所示示例,但如果将图像旋转90度,则会失败。JammingThebBits:你是在寻找一个通用的解决方案,还是仅仅是为给定的图像寻找一个解决方案?@New是的,我知道,这就是问题的所在(现在)。白色的水滴形状总是这样的?如果是这样,您可以简单地将其设置为“水平”(
minareact
并旋转),然后使用前面解释的垂直投影。否则,请发布一些涵盖所有可能性的测试用例。请展示一些其他形状,这样我们就知道我们在处理什么。垂直投影直方图。对于每列,求和1表示白色像素,求和0表示黑色像素。您会发现“最窄”部分的值大于0,但低于较大的部分parts@Miki这仅适用于所示示例,但如果将图像旋转90度,则会失败。JammingThebBits:你是在寻找一个通用的解决方案,还是仅仅是为给定的图像寻找一个解决方案?@New是的,我知道,这就是问题的所在(现在)。白色的水滴形状总是这样的?如果是这样,您可以简单地将其设置为“水平”(minareact
并旋转),然后使用前面解释的垂直投影。否则,请发布一些涵盖所有可能的测试用例。请展示一些其他形状,这样我们就知道我们在处理什么。“二次核”听起来有点像抛物线核。我想你是认真的吧?这是一个很好的方法,但为什么呢?什么是灰度图像使用?你是对的,我将它改为“正方形”,以避免进一步的混乱。分水岭自然会找到两个组件之间的边界。我发现将边界没有明确定义的组件分开是很有用的。灰度图像将包括CC算法之前发现的不同成分,以及侵蚀的前景,该前景将设置为“未知”,以便WST可以执行其工作。感谢您的反馈,如果这澄清了方法,我将添加此答案。@T感谢您的详细说明(竖起大拇指),我将在周末尝试:)因此我将很快更新!“二次核”听起来有点像抛物线核。我想你是认真的吧?这是一个很好的方法,但为什么呢?什么是灰度图像使用?你是对的,我将它改为“正方形”,以避免进一步的混乱。分水岭自然会找到两个组件之间的边界。我发现将边界没有明确定义的组件分开是很有用的。灰度图像将包括CC算法之前发现的不同成分,以及侵蚀的前景,该前景将设置为“未知”,以便WST可以执行其工作。感谢您的反馈,如果这澄清了方法,我将添加此答案。@T感谢您的详细说明(竖起大拇指),我将在周末尝试:)因此我将很快更新!