OpenCV Python 如何实现概率霍夫变换

OpenCV Python 如何实现概率霍夫变换

概率霍夫变换是霍夫变换的一种优化方法。霍夫变换即使对于只有两个参数的直线也需要大量计算。概率霍夫变换不考虑所有的点,只需要一个随机子集的点就足够进行直线检测。我们可以按照以下步骤在图像上实现概率霍夫变换:

  • 导入所需的库。在以下所有示例中,所需的Python库是 OpenCV 。请确保已经安装了它。

  • 使用 cv2.imread() 来读取输入图像。使用该方法读取的RGB图像是BGR格式的。可选择将读取的BGR图像赋值给img。

  • 现在使用 cv2.cvtColor() 函数将此BGR图像转换为灰度图像。可选择将转换后的灰度图像赋值给gray。

  • 对灰度图像应用阈值处理,将其转换为二值图像。调整第二个参数(threshValue)以获得更好的二值图像。

  • 使用Canny边缘检测器在二值图像中找到边缘(您也可以使用其他边缘检测器来检测边缘)。

edges = cv2.Canny(gray,50,200,apertureSize = 3)
  • 应用概率霍夫变换在边缘图像上使用 cv2.HoughLinesP() 。它返回检测到的线条的坐标。
lines = cv2.HoughLinesP(edges, 1, np.pi/180, 50, minLineLength, maxLineGap)
  • 在图像上画线并显示输出图像。

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

输入图像

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

OpenCV Python 如何实现概率霍夫变换

示例

在此示例中,我们使用以下线条属性对图像进行概率霍夫线变换 −

  • minLineLength = 10

  • maxLineGap = 5

# import required libraries
import cv2
import numpy as np

# read the input image
img = cv2.imread('sudoku.jpg')

# convert the input image to grayscale image
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

# find the edges using Canny edge detector
edges = cv2.Canny(gray,50,200,apertureSize = 3)
minLineLength = 10
maxLineGap = 5

# apply probabilistic Hough transform
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 如何实现概率霍夫变换

OpenCV Python 如何实现概率霍夫变换

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

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程