OpenCV霍夫变换直线检测,Python
假设需要把图片
中的直线检测出来并用红线标记:
import cv2
import numpy as np
if __name__ == "__main__":
original_img = cv2.imread("p.jpg")
gray = cv2.cvtColor(original_img, cv2.COLOR_BGR2GRAY)
blur_img = cv2.GaussianBlur(gray, (3, 3), 0)
edges = cv2.Canny(blur_img, 50, 150, apertureSize=3)
rho = 1 # 线段以像素为单位的精度,double类型,1.0为1个像素
theta = np.pi / 180 # 通过步长为1的半径和步长为π/180的角度,搜索所有可能的直线。
threshold = 10 # 累加平面的阈值,int,超过设定阈值才被判定检测出线段,值越大,检出的线段个数越少。
minLineLength = 20 # 能组成一条直线的最少点的数量. 点数量不足的直线将被抛弃.如果小于该值,则不被认为是一条直线.
maxLineGap = 10 # 能被认为在一条直线上的亮点的最大距离.同一方向上两条线段断定为一条线段的最大容许间隔(断裂).直线间隙最大值,如果两条直线间隙大于该值,则被认为是两条线段,否则是一条。
lines = cv2.HoughLinesP(edges, rho, theta, threshold,
minLineLength, maxLineGap)
print(type(lines))
for l in lines.tolist():
x1, y1, x2, y2 = l[0]
cv2.line(original_img, (x1, y1), (x2, y2),
color=(0, 0, 255), thickness=1)
cv2.imshow('Canny', edges)
cv2.imshow('Result', original_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
结果:
还没有评论,来说两句吧...