我正在通过开发一个项目来学习使用Python的OpenCV图像处理库,旨在检测手掌纹路。
我所做的基本上是使用Canny边缘检测,然后在边缘上应用霍夫线检测,但结果并不理想。这是我正在使用的源代码:
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低/高阈值参数集,但结果要么有太多噪点,要么缺少(部分)主要线条。上面的图片已经是我到目前为止得到的最好结果了。
是否有什么我应该做来改善结果,或者任何其他方法可以获得更好的结果?
感谢任何帮助!