基于Python的opencv学习练习(十四)霍夫变换直线检测

    xiaoxiao2023-10-30  148

    import cv2 import numpy as np img = cv2.imread('3.jpg',1) gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) edges = cv2.Canny(gray, 50,150,apertureSize=3) lines = cv2.HoughLines(edges, 1, np.pi/180,200) lines = np.reshape(lines,(lines.shape[0],-1)) for rho, theta in lines: a = np.cos(theta) b = np.sin(theta) x0 = a*rho y0 = b*rho x1 = int(x0 + 1000*(-b)) y1 = int(y0 + 1000*(a)) x2 = int(x0 - 1000*(-b)) y2 = int(y0 - 1000*(a)) cv2.line(img, (x1,y1), (x2, y2), (0,0,255),2) cv2.imshow('img',img) cv2.waitKey(0)

    cv2.HoughLines()。 返回值就是(ρ,θ)。ρ 的单位是像素,θ 的单位是弧度。这个函数的第一个参 数是一个二值化图像,所以在进行霍夫变换之前要首先进行二值化,或者进行 Canny 边缘检测。第二和第三个值分别代表 ρ 和 θ 的精确度。第四个参数是 阈值,只有累加其中的值高于阈值时才被认为是一条直线,也可以把它看成能 检测到的直线的最短长度(以像素点为单位)。

    最新回复(0)