Probabilistic Hough Transform是Hough Transform的优化版本。即使是具有两个参数的直线,Hough变换也需要大量计算。概率Hough变换并不考虑所有点,它仅考虑随机的一部分点,这已足以检测直线。我们可以遵循以下步骤在图像上实现概率Hough变换-
- 导入所需的库。在以下所有示例中,所需的Python库为 OpenCV 。确保您已经安装了它。
-
使用 cv2.imread() 读取输入图像。使用此方法读取的RGB图像以BGR格式表示。选择性地将读取的BGR图像分配给img。
-
现在,使用 cv2.cvtColor() 函数将BGR图像转换为灰度图像。选择性地将转换后的灰度图像分配给gray。
-
对灰度图像进行阈值处理,将其转换为二进制图像。调整第二个参数(threshValue)以获取更好的二进制图像。
-
使用Canny边缘检测器在二进制图像中查找边缘(您可以使用任何其他边缘检测器来检测边缘)。
edges = cv2.Canny(gray,50,200,apertureSize = 3)
- 使用 cv2.HoughLinesP() 对边缘图像应用概率Hough变换。它返回检测到的直线的坐标。
lines = cv2.HoughLinesP(edges, 1, np.pi/180, 50, minLineLength, maxLineGap)
- 在图像上绘制直线并显示输出图像。
让我们查看一些示例,以便更清楚地理解。
输入图像
我们将在以下示例中使用此图像作为输入文件。
示例
在此示例中,我们找到图像上的概率Hough Line变换,并具有以下线性属性-
- minLineLength = 10
-
maxLineGap = 5
# 导入所需库
import cv2
import numpy as np
# 读取输入图片
img = cv2.imread('sudoku.jpg')
# 将输入图片转换为灰度图
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# 使用Canny边缘检测器查找边缘
edges = cv2.Canny(gray,50,200,apertureSize = 3)
minLineLength = 10
maxLineGap = 5
# 应用概率性霍夫变换
lines = cv2.HoughLinesP(edges,1,np.pi/180,50,minLineLength,maxLineGap)
for line in lines:
for x1,y1,x2,y2 in line:
cv2.line(img,(x1,y1),(x2,y2),(0,255,0),2)
cv2.imshow('houghlines.jpg',img)
cv2.imshow('edges', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()
输出结果
运行上述程序后,它将产生以下窗口−
第一个窗口”Edges”显示使用Canny边缘检测算法检测到的边缘。第二个窗口”houghlines.jpg”显示使用概率霍夫线变换检测到的直线。
为帮助更多对人工智能感兴趣的小伙伴们能够有效的系统性的学习以及论文的研究,小编特意制作整理了一份人工智能学习资料给大家,整理了很久,非常全面。
大致内容包括一些人工智能基础入门视频和文档+AI常用框架实战视频、计算机视觉、机器学习、图像识别、NLP、OpenCV、YOLO、pytorch、深度学习与神经网络等学习资料、课件源码、国内外知名精华资源、以及AI热门论文等全套学习资料。
需要以上这些文中提到的资料,请点击此处→【人工智能全套完整VIP资料】即可免费获取。
看完三件事❤️
- 如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
- 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
- 关注作者公众号 『 python深度学习NLP 』,不定期分享原创知识。
- 关注后回复【666】扫码即可获取学习资料包。
- 同时可以期待后续文章ing🚀。