如何在OpenCV Python中实现概率Hough变换?

如何在OpenCV Python中实现概率Hough变换?

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)
  • 在图像上绘制直线并显示输出图像。

让我们查看一些示例,以便更清楚地理解。

输入图像

我们将在以下示例中使用此图像作为输入文件。

如何在OpenCV Python中实现概率Hough变换?

示例

在此示例中,我们找到图像上的概率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()

输出结果

运行上述程序后,它将产生以下窗口−

如何在OpenCV Python中实现概率Hough变换?

如何在OpenCV Python中实现概率Hough变换?

第一个窗口”Edges”显示使用Canny边缘检测算法检测到的边缘。第二个窗口”houghlines.jpg”显示使用概率霍夫线变换检测到的直线。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Python OpenCV