Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opencv 噪声照片的低对比度线检测_Opencv_Line_Feature Detection_Noise_Hough Transform - Fatal编程技术网

Opencv 噪声照片的低对比度线检测

Opencv 噪声照片的低对比度线检测,opencv,line,feature-detection,noise,hough-transform,Opencv,Line,Feature Detection,Noise,Hough Transform,我试图检测屏幕照片上的低对比度线或一般的嘈杂图像。我似乎遇到了两个问题: 我无法用自适应阈值或边缘检测算法可靠地检测线条,因为屏幕的噪声/暗网格。模糊似乎有点帮助,但不足以让它工作 当同一条直线只有几段可见时(由于噪声、光线条件或其他原因),我希望将检测到的线段连接到一条直线 img = cv2.imread("test.jpg") gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) gray=cv2.GaussianBlur(gray,(9,9),0

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

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

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

     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\u TRUNCATED
    THRESH\u to zero
    的阈值函数的本地版本可能会有帮助。。。 过滤掉网格。高对比度

    因为我没有发布图片的名声,所以我添加了链接。 具有低对比度线的图像:

    检测到的行:


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

    您可以编辑您的问题并包括一张样本图像吗?没有代表,但是我把它们上传到其他地方并添加了链接。你是指全球平均值还是11X11窗口的平均值?有没有一种简单的方法可以将所有负值减去并设置为零?我的for循环非常慢:在一个较弱的MediaFilter之后进行双边过滤,可以过滤掉LCD屏幕的网格。不,我可以慢慢来:)