答案 0 :(得分:5)
你已经标记了这个opencv很棒 - 我强烈建议你看看openFrameworks和openCV插件,因为基本的例子会为你提供一些很好的起点。
我将采取的一般方法是首先将图像提取到亮区和暗区,检测手和手指的边缘,然后简化数据,直到有线条代表手指的边缘和尖端。最后,在第2和第3指之间使用下部内缝,在第2和第4指尖停止,第3和第4指针的内侧,停在第4根尖端,这将给你2D:4D比率。
首先,您需要处理图像以获得openCV可以轻松处理的黑白图像。您可能必须使用各种阈值来同时检测手的轮廓和手指的内缝。 (你甚至可能需要两次通过来检测轮廓和内缝)
虽然有many approaches特征检测,但OpenCV通常会返回检测到的“blob”数组。有了正确的阈值,我相信你能够可靠而简单地找到每个手指的内缝的连续水平斑点(或几乎连续的,允许附近斑点之间的一些距离)。
用于检测内缝的简单算法是从左上角开始遍历检测到的斑点并从左到右穿过图像,就像读取页面一样。从图像中的斑点组合一组检测到的水平线,并使用各种图像处理阈值,最小接受线长度和检测到的斑点之间的距离余量,您仍然认为这些斑点属于同一条线,直到您满意为止很好地检测手指边缘。
检测到水平线后,您可以再次处理斑点,寻找代表手指尖端的垂直线(当您点击先前检测到的水平线时停止)
最后,找到代表正确内缝的线条,测量它们直到它们与适当的指尖相交,你应该有你的比例!
答案 1 :(得分:5)
有趣的问题。我会这样做:
首先,通过Otsu的阈值对图像进行二值化。然后使用Medial-Axis Transform(MAT)找到图像的骨架。这将意味着对图像进行距离变换,然后使用自适应阈值处理来获得距离变换中的局部最大值。这为您的图像提供了粗略且准备好的骨架。从这里开始code示例。
获得的手骨架可能会略微断开,在这种情况下使用OpenCV形态“CLOSE”(非“开放”)功能可以将其连接成单个骨架。然后检查结果手的convexity defects应该给出估计值。