在OpenCV HoughLines中检测多条线
我正在使用OpenCV 4.4并运行以下代码来检测网格线。当我显示图像时,它总是检测到一行,如屏幕截图所示。如何检测网格中的所有垂直线在OpenCV HoughLines中检测多条线,opencv,Opencv,我正在使用OpenCV 4.4并运行以下代码来检测网格线。当我显示图像时,它总是检测到一行,如屏幕截图所示。如何检测网格中的所有垂直线 grid = cv2.imread('images/grid.jpeg') grayscale = cv2.cvtColor(grid, cv2.COLOR_BGR2GRAY) edges = cv2.Canny(grayscale, 50, 150, apertureSize=3) lines = cv2.HoughLines(edges, 1, np.pi
grid = cv2.imread('images/grid.jpeg')
grayscale = cv2.cvtColor(grid, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(grayscale, 50, 150, apertureSize=3)
lines = cv2.HoughLines(edges, 1, np.pi/180, 100)
for rho, theta in lines[0]:
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(grid, (x1, y1), (x2, y2), (255, 0, 0), 2)
cv2.imshow("Lines", grid)
cv2.waitKey(0)
cv2.destroyAllWindows()
原始图像:
您可以使用
lineDetector
算法
- 按照@Mika的建议,找到图像的边缘
-
img=cv2.imread(“lines.png”) img\u gry=cv2.CVT颜色(img,cv2.COLOR\u BGR2GRY灰色) img_cny=cv2.Canny(img_gry,50200)
- 结果:
- 要检测垂直边,x坐标之间的差值应接近0,因为只有y坐标在变化
-
如果abs(x1-x2)<3: cv2.线(img,pt1=(x1,y1),pt2=(x2,y2),颜色=(0,0,255),厚度=3)
-
- 结果:
导入cv2
img=cv2.imread(“lines.png”)
img\u gry=cv2.CVT颜色(img,cv2.COLOR\u BGR2GRY灰色)
img_cny=cv2.Canny(img_gry,50200)
lns=cv2.ximgproc.createFastLineDetector().detect(img_cny)
对于lns中的ln:
x1=int(ln[0][0])
y1=int(ln[0][1])
x2=int(ln[0][2])
y2=int(ln[0][3])
如果abs(x1-x2)<3:
cv2.线(img,pt1=(x1,y1),pt2=(x2,y2),颜色=(0,0,255),厚度=3)
cv2.imshow(“lns”,img)
cv2.等待键(0)
你能显示边缘图像吗?@Mika添加了原始图像。