Python How to detect vertical and horizontal lines in an image with HoughLines with OpenCV?

前端 未结 3 1386
无人共我
无人共我 2020-12-08 03:09

I m trying to obtain a threshold of the calibration chessboard. I cant detect directly the chessboard corners as there is some dust as i observe a micro chessboard. I try se

3条回答
  •  没有蜡笔的小新
    2020-12-08 03:29

    You are using too small value for rho.

    Try the below code:-

    import numpy as np
    import cv2
    
    gray = cv2.imread('lines.jpg')
    edges = cv2.Canny(gray,50,150,apertureSize = 3)
    cv2.imwrite('edges-50-150.jpg',edges)
    minLineLength=100
    lines = cv2.HoughLinesP(image=edges,rho=1,theta=np.pi/180, threshold=100,lines=np.array([]), minLineLength=minLineLength,maxLineGap=80)
    
    a,b,c = lines.shape
    for i in range(a):
        cv2.line(gray, (lines[i][0][0], lines[i][0][1]), (lines[i][0][2], lines[i][0][3]), (0, 0, 255), 3, cv2.LINE_AA)
        cv2.imwrite('houghlines5.jpg',gray)
    

    Note, the change in rho value, pi value and maxLineGap to reduce outliers.

    Input Image

    Edges Image

    Output Image

    Miscellaneous - Tips for Beginners

    1. A lot of Computer Vision algorithms assume certain assumptions, well, in how the input should be. When building Proof-of-Concept, always try to view intermediate inputs you generate before applying such algorithms.

    2. For quick hack, if an algorithm accepts some parameters, use a for loop on possible values of these parameters and see how the results varies. Link to an answer on how to quickly generate these possible values.

    3. To really understand the algorithm, read on wiki or even better sources where if necessary. And then again/still do the above hack(point 2). It will further clear your understanding.

提交回复
热议问题