我试图检测屏幕照片或一般嘈杂图像上的低对比度线条。我似乎遇到了两个问题:
由于屏幕的噪声/暗网格,我无法使用自适应阈值或边缘检测算法可靠地检测线条。模糊似乎有点帮助,但不足以让我让它发挥作用。
当同一条线只有几段可见时(由于噪声、光照条件或其他原因),我想将检测到的线段连接到一条直线。
img = cv2.imread("test.jpg") gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) gray=cv2.GaussianBlur(gray,(9,9),0) bin = cv2.adaptiveThreshold(gray2, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 33, 3) cv2.namedWindow('Test') cv2.imshow("Test", bin)
我也尝试过cv2.Canny
and cv2.HoughLinesP
,但没有好的结果,因为暗网格把两者都搞砸了。提前致谢!
编辑:我想出一个本地版本的阈值函数,THRESH_TRUNCATED
或者THRESH_TOZERO
可以帮助......过滤掉网格。和高对比度
由于我没有发布图片的声誉,我添加了链接。具有低对比度线的图像:
检测到的线路: