如何解决Houghlines 无法找到清晰可见的单线
下面是我用来获取图像中人眼清晰可见的垂直线的代码。角度已设置为 3 弧度到 3.3 弧度,因此它仅检测垂直线。 我的另一个问题是如何正确检测线的端点。我尝试了 EqualizeHist 和 AdaptiveThreshold,但似乎一切都搞砸了我拥有的图像。
sobelx_c = cv2.sobel(image,cv2.CV_8UC1,1,ksize=1)
minLineLength,maxLineGap = 30,5
lines = cv2.houghlines(sobelx_c,np.pi/180,185,minLineLength,maxLineGap)
list_to_write = []
im = img.copy()
# norm_difference is to make sure similar lines dont get repeated.
def norm_difference(xs,ys):
return sum(abs(x-y) for x,y in zip(xs,ys)) > 5
if lines is not None:
for i in range(0,len(lines)):
rho = lines[i][0][0]
theta = lines[i][0][1]
if (theta<3.3 and theta>3):
var = [90 - np.rad2deg(theta),rho]
if all(norm_difference(var,other) for other in list_to_write):
list_to_write.append(var)
a = np.cos(theta)
b = np.sin(theta)
x0 = a * rho
y0 = b * rho
pt1 = (int(x0 + 1000*(-b)),int(y0 + 1000*(a)))
pt2 = (int(x0 - 1000*(-b)),int(y0 - 1000*(a)))
print(pt1,pt2)
cv2.line(im,pt1,pt2,(0,255,0),3)
write_into_txt("lines.txt",list_to_write)
cv2.imwrite('lines.jpg',im)
这是图片: A single white vertical line in the grayscale image can be seen
不幸的是,这些是它在真实图像上检测到的线条: The edge of the square should have been detected as sobel in the x direction was used
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。