2

我试图检测屏幕照片或一般嘈杂图像上的低对比度线条。我似乎遇到了两个问题:

  1. 由于屏幕的噪声/暗网格,我无法使用自适应阈值或边缘检测算法可靠地检测线条。模糊似乎有点帮助,但不足以让我让它发挥作用。

  2. 当同一条线只有几段可见时(由于噪声、光照条件或其他原因),我想将检测到的线段连接到一条直线。

     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.Cannyand cv2.HoughLinesP,但没有好的结果,因为暗网格把两者都搞砸了。提前致谢!

编辑:我想出一个本地版本的阈值函数,THRESH_TRUNCATED或者THRESH_TOZERO可以帮助......过滤掉网格。和高对比度

由于我没有发布图片的声誉,我添加了链接。具有低对比度线的图像:

在此处输入图像描述

检测到的线路:

在此处输入图像描述

4

1 回答 1

1

在足够大的窗口(例如 11x11)上运行中值滤波器,然后减去平均(或略低于平均)图像强度将使线条更容易检测。

于 2013-06-07T11:04:36.607 回答