gpt4 book ai didi

Python 如何使用 HoughLines 和 OpenCV 检测图像中的垂直线和水平线?

转载 作者:太空狗 更新时间:2023-10-29 17:11:54 25 4
gpt4 key购买 nike

我正在尝试获取校准棋盘的阈值。我无法直接检测到棋盘角,因为我观察微型棋盘时有一些灰尘。我尝试了几种方法,HoughLinesP 似乎是最简单的方法。但是成绩不好,如何提高成绩?

import numpy as np
import cv2

img = cv2.imread('lines.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray,50,150,apertureSize = 3)
print img.shape[1]
print img.shape
minLineLength=100
lines = cv2.HoughLinesP(image=edges,rho=0.02,theta=np.pi/500, threshold=10,lines=np.array([]), minLineLength=minLineLength,maxLineGap=100)

a,b,c = lines.shape
for i in range(a):
cv2.line(img, (lines[i][0][0], lines[i][0][1]), (lines[i][0][2], lines[i][0][3]), (0, 0, 255), 3, cv2.LINE_AA)
cv2.imwrite('houghlines5.jpg',img)

正如你在下图中看到的,我无法获得我的棋盘,线条绘制在很多方向......(原图:https://s22.postimg.org/iq2b91xq9/droite_Image_00000.jpg)

enter image description here

最佳答案

您使用的 rho 值太小。

试试下面的代码:-

import numpy as np
import cv2

gray = cv2.imread('lines.jpg')
edges = cv2.Canny(gray,50,150,apertureSize = 3)
cv2.imwrite('edges-50-150.jpg',edges)
minLineLength=100
lines = cv2.HoughLinesP(image=edges,rho=1,theta=np.pi/180, threshold=100,lines=np.array([]), minLineLength=minLineLength,maxLineGap=80)

a,b,c = lines.shape
for i in range(a):
cv2.line(gray, (lines[i][0][0], lines[i][0][1]), (lines[i][0][2], lines[i][0][3]), (0, 0, 255), 3, cv2.LINE_AA)
cv2.imwrite('houghlines5.jpg',gray)

请注意,rho 值、pi 值和 maxLineGap 的变化是为了减少异常值。

输入图像 Input Image

边缘图像 Edges Image

输出图像 Output Image

杂项 - 初学者提示

  1. 很多计算机视觉算法都假设了某些假设,嗯,输入应该是怎样的。在构建概念验证时,请始终尝试查看您在应用此类算法之前生成的中间输入。

  2. 为了快速破解,如果算法接受某些参数,请对这些参数的可能值使用 for 循环,看看结果如何变化。 Link找到有关如何快速生成这些可能值的答案。

  3. 要真正理解该算法,请在必要时阅读 wiki 或更好的资源。然后再次/仍然执行上述黑客攻击(第 2 点)。它将进一步澄清您的理解。

关于Python 如何使用 HoughLines 和 OpenCV 检测图像中的垂直线和水平线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39752235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com