使用Python中的OpenCV检测手掌线条

5

我正在通过开发一个项目来学习使用Python的OpenCV图像处理库,旨在检测手掌纹路。

enter image description here

我所做的基本上是使用Canny边缘检测,然后在边缘上应用霍夫线检测,但结果并不理想。

enter image description here

这是我正在使用的源代码:

original = cv2.imread(file)
img = cv2.cvtColor(original, cv2.COLOR_BGR2GRAY)
save_image_file(img, "gray")

img = cv2.equalizeHist(img)
save_image_file(img, "equalize")

img = cv2.GaussianBlur(img, (9, 9), 0)
save_image_file(img, "blur")

img = cv2.Canny(img, 40, 80)
save_image_file(img, "canny")

lined = np.copy(original) * 0
lines = cv2.HoughLinesP(img, 1, np.pi / 180, 15, np.array([]), 50, 20)
for line in lines:
    for x1, y1, x2, y2 in line:
        cv2.line(lined, (x1, y1), (x2, y2), (0, 0, 255))
save_image_file(lined, "lined")

output = cv2.addWeighted(original, 0.8, lined, 1, 0)
save_image_file(output, "output")

我尝试了不同的高斯核大小和Canny低/高阈值参数集,但结果要么有太多噪点,要么缺少(部分)主要线条。上面的图片已经是我到目前为止得到的最好结果了。
是否有什么我应该做来改善结果,或者任何其他方法可以获得更好的结果?
感谢任何帮助!

我非常对这个主题感兴趣,我刚开始研发它;你有进展了吗?我们能私下讨论一下吗?谢谢! - Doubidou
@Doubidou,抱歉,我没有更多进展,仅限于我之前发布的内容。 - ZhouX
你有没有尝试查看关于这个领域的最新论文?我在2012年对这个主题很感兴趣,但是当时没有太多可用的论文。最终,我采用了NASA的软件,该软件可以跟踪陆地山脊和河流。 - nurettin
1个回答

0

你正在寻找的是非常实验性的。你已经完成了最重要的功能。我建议你调整参数,以获得合理和嘈杂的行数,然后可以进行一些过滤:

  • 使用形态学滤波器,

  • 根据线条长度、对比度等分类线条

  • 通过将手掌区域(不包括手指)划分为网格(4x4..其中4个垂直手指角可以定义网格的配置)来改进您的类别。

  • 计算梯度图像,线条方向也可能有所帮助
  • 搜索算法“累积水平线检测”,它可以帮助确定检测到的线条的准确性

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接