我试图检测屏幕照片上的低对比度线条或一般的嘈杂图像。我似乎遇到了两个问题:
由于屏幕的噪声/暗网格,我无法使用自适应阈值或边缘检测算法可靠地检测到线路。模糊似乎有点帮助,但还不足以让我开始工作。
当同一条线只能看到几个线段时(由于噪音,光线条件或其他因素),我想将检测到的线段连接成一条直线。
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
和cv2.HoughLinesP
,但没有取得好成绩,因为黑暗网格混淆了两者。提前谢谢!
编辑:我认为使用THRESH_TRUNCATED
或THRESH_TOZERO
的阈值函数的本地版本可以帮助...
过滤掉网格。和高对比度
由于我没有发布图片的声誉,我添加了链接。 具有低对比度线的图像:
检测到行:
答案 0 :(得分:1)
在足够大的窗口(例如11x11)上运行中值滤波器,然后减去平均值(或略低于平均值)图像强度将使线更容易检测。