1. 程式人生 > >python+opencv實現霍夫變換檢測直線

python+opencv實現霍夫變換檢測直線

功能:

建立一個滑動條來控制檢測直線的長度閾值,即大於該閾值的檢測出來,小於該閾值的忽略
注意:這裡用的函式是HoughLinesP而不是HoughLines,因為HoughLinesP直接給出了直線的斷點,在畫出線段的時候可以偷懶

程式碼:

# -*- coding: utf-8 -*- 

import cv2

#兩個回撥函式
def HoughLinesP(minLineLength):
    global minLINELENGTH 
    minLINELENGTH = minLineLength + 1
    print "minLINELENGTH:",minLineLength + 1
tempIamge = scr.copy() lines = cv2.HoughLinesP( edges, 1, cv2.cv.CV_PI/180, minLINELENGTH, 0 ) for x1,y1,x2,y2 in lines[0]: cv2.line(tempIamge,(x1,y1),(x2,y2),(0,255,0),1) cv2.imshow(window_name,tempIamge) #臨時變數 minLineLength = 20 #全域性變數 minLINELENGTH = 20 max_value = 100 window_name = "HoughLines Demo"
trackbar_value = "minLineLength" #讀入圖片,模式為灰度圖,建立視窗 scr = cv2.imread("G:\\homework\\building.bmp") gray = cv2.cvtColor(scr,cv2.COLOR_BGR2GRAY) img = cv2.GaussianBlur(gray,(3,3),0) edges = cv2.Canny(img, 50, 150, apertureSize = 3) cv2.namedWindow(window_name) #建立滑動條 cv2.createTrackbar( trackbar_value, window_name, \ minLineLength, max_value, HoughLinesP) #初始化
HoughLinesP(20) if cv2.waitKey(0) == 27: cv2.destroyAllWindows()

呼叫:

>>> import os
>>> os.chdir("g:\homework")
>>> 
>>> import HoughLines
minLINELENGTH: 20
minLINELENGTH: 21
minLINELENGTH: 22
minLINELENGTH: 23
minLINELENGTH: 25
minLINELENGTH: 26
minLINELENGTH: 27
minLINELENGTH: 28

效果圖:

HoughLinesP