代码之家  ›  专栏  ›  技术社区  ›  jruivo

使用Canny和Hough变换检测图像是否像素化

  •  0
  • jruivo  · 技术社区  · 7 年前

    我在网上阅读,我发现可以根据使用边缘检测器检测到的行数判断图像是否被像素化,然后应用Hough变换。
    我尝试过这种方法,但是hough转换似乎没有正确地检测到线条,我无法找出它为什么不能正常工作。
    以下是一些结果图像供参考:Canny边缘检测结果

    和Hough变换结果


    我可以做些什么来改进测线检测?
    我使用的代码基于一些在线教程:

    img=cv2.imread(图像路径)
    灰色=cv2.cvt颜色(img,cv2.color_bgr2gray)
    
    高阈值,阈值im=cv2.阈值(灰色,0,255,cv2.阈值二进制+cv2.阈值otsu)
    低阈值=0.5*高阈值
    边缘=cv2.canny(img、低阈值、高阈值)
    
    最小长度=200
    最大线间隙=10
    线条=cv2.houghlinesp(边缘,1,np.pi/180100,最小线条长度,最大线条间隙)
    对于行[0]中的x1、y1、x2、y2:
    cv2.线(img,(x1,y1),(x2,y2),(0255,0),2)
    
    cv2.imshow(“img”,img)
    cv2.等待键(0)
    cv2.摧毁Windows()
    
    我尝试过这种方法,但是Hough变换似乎没有正确地检测到线条,我不明白为什么它不能正常工作。
    以下是一些结果图像供参考:Canny边缘检测结果

    和Hough变换结果


    我能做些什么来改进测线检测?
    我使用的代码基于一些在线教程:

    img = cv2.imread(image_path)
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    
    high_thresh, thresh_im = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
    lowThresh = 0.5*high_thresh
    edges = cv2.Canny(img, lowThresh, high_thresh)
    
    minLineLength = 200
    maxLineGap = 10
    lines = cv2.HoughLinesP(edges,1,np.pi/180,100,minLineLength,maxLineGap)
    for x1,y1,x2,y2 in lines[0]:
        cv2.line(img,(x1,y1),(x2,y2),(0,255,0),2)
    
    cv2.imshow('img',img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   zindarod    7 年前
    edges = cv2.Canny(gray,50,150,apertureSize = 3)
    minLineLength = 200
    maxLineGap = 10
    lines = cv2.HoughLinesP(edges,1,np.pi/180,100,minLineLength,maxLineGap)
    # edited this line
    for line in lines:
        x1,y1,x2,y2 = line[0]
        cv2.line(image,(x1,y1),(x2,y2),(0,255,0),2)
    
    推荐文章