针对“python opencv检测直线 cv2.HoughLinesP的实现”,以下是一份完整攻略。
cv2.HoughLinesP是OpenCV中检测直线的函数,通过应用霍夫变换来完成这个过程。它能够在图像中检测到一组直线,并返回一组由起点和终点组成的(x1, y1, x2, y2)值的坐标。
cv2.HoughLinesP函数的参数如下:
cv2.HoughLinesP(image, rho, theta, threshold[, lines[, minLineLength[, maxLineGap]]])
各参数含义如下:
以下我们通过两个实例来演示如何使用cv2.HoughLinesP函数检测直线。
import cv2
import numpy as np
# 读入一张图像
image = cv2.imread('image.png')
# 转换为灰度图像
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 阈值处理
ret, thresh = cv2.threshold(gray, 180, 255, cv2.THRESH_BINARY)
# 边缘检测
edges = cv2.Canny(thresh, 50, 150, apertureSize=3)
# 进行霍夫直线检测
lines = cv2.HoughLinesP(edges, 1, np.pi / 180, 100, minLineLength=100, maxLineGap=10)
# 在原图上标记检测出的直线
for line in lines:
x1, y1, x2, y2 = line[0]
cv2.line(image, (x1, y1), (x2, y2), (0, 0, 255), 2)
# 展示结果
cv2.imshow('Image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
以上代码将从一张图像中检测出所有的横向直线并在原图上进行标记。
import cv2
import numpy as np
# 读入一张图像
image = cv2.imread('image.png')
# 转换为灰度图像
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 阈值处理
ret, thresh = cv2.threshold(gray, 180, 255, cv2.THRESH_BINARY)
# 边缘检测
edges = cv2.Canny(thresh, 50, 150, apertureSize=3)
# 进行霍夫直线检测
lines = cv2.HoughLinesP(edges, 1, np.pi / 180, 100, minLineLength=100, maxLineGap=10)
# 对检测出的直线进行角度判断,筛选出竖直线
for line in lines:
x1, y1, x2, y2 = line[0]
# 判断直线的角度是否接近于竖直
if abs(x2 - x1) < abs(y2 - y1):
cv2.line(image, (x1, y1), (x2, y2), (0, 0, 255), 2)
# 展示结果
cv2.imshow('Image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
以上代码将从一张图像中检测出所有的竖向直线并在原图上进行标记。
通过以上两个实例,我们可以将cv2.HoughLinesP函数的使用过程进行总结:
希望这份攻略可以对您有所帮助。