cv2.HoughLines()函數是在二值圖像中查找直線,cv2.HoughLinesP()函數可以查找直線段。
cv2.HoughLinesP()函數原型:
HoughLinesP(image, rho, theta, threshold, lines=None, minLineLength=None, maxLineGap=None)
- image: 必須是二值圖像,推薦使用canny邊緣檢測的結果圖像;
- rho: 線段以像素為單位的距離精度,double類型的,推薦用1.0
- theta: 線段以弧度為單位的角度精度,推薦用numpy.pi/180
- threshod: 累加平面的閾值參數,int類型,超過設定閾值才被檢測出線段,值越大,基本上意味着檢出的線段越長,檢出的線段個數越少。根據情況推薦先用100試試
- lines:這個參數的意義未知,發現不同的lines對結果沒影響,但是不要忽略了它的存在
- minLineLength:線段以像素為單位的最小長度,根據應用場景設置
- maxLineGap:同一方向上兩條線段判定為一條線段的最大允許間隔(斷裂),超過了設定值,則把兩條線段當成一條線段,值越大,允許線段上的斷裂越大,越有可能檢出潛在的直線段
HoughLinesP()調用例子:
# coding=utf-8
import cv2
import numpy as np
img = cv2.imread('02.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gaus = cv2.GaussianBlur(gray,(3,3),0)
edges = cv2.Canny(gaus, 50, 150, apertureSize=3)
minLineLength = 100
maxLineGap = 10
lines = cv2.HoughLinesP(edges, 1, np.pi / 180, 100, minLineLength, maxLineGap)
for x1, y1, x2, y2 in lines[0]:
cv2.line(img, (x1, y1), (x2, y2), (0, 255, 0), 2)
cv2.imshow("houghline",img)
cv2.waitKey()
cv2.destroyAllWindows()