我正在使用Python中的OpenCV库,尝试检测图像中矩形形状的长边和短边。我使用了Canny边缘检测器,然后应用Hough变换来检测线条。然而,我遇到了一个问题,即输出检测到多条相同长度的线条,并且无法正确绘制'y'边缘。
下面是我的代码的简化版本:
import cv2
import numpy as np
img = cv2.imread(r"C:\Users\Asus Hn004W\Desktop\1.jpeg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray, 78, 106, apertureSize=3)
lines = cv2.HoughLines(edges, 1, np.pi/180, 200)
for r_theta in lines:
arr = np.array(r_theta[0], dtype=np.float64)
r, theta = arr
a = np.cos(theta)
b = np.sin(theta)
x0 = a*r
y0 = b*r
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)
cv2.waitKey(0)
cv2.destroyAllWindows()
我想知道为什么检测到多条相同长度的线,为什么不能正确绘制“y”边。我应该对代码进行哪些修改才能准确检测和绘制矩形的边?
感谢您的帮助enter image description here
1条答案
按热度按时间epggiuax1#
多行
所有投票超过阈值的结果将从
HoughLines()
返回。所以,你应该使用一些后处理来决定你的结果。通常使用的方法称为“非最大抑制”。
未正确绘制“y”边
也许,你的阈值(
200
)对于垂直线来说太大了(或者canny的结果不好)。