| 
 | 
 
 
原始圖 
python 霍夫轉換 
 
 
 
 
完整代碼 
 
- import  cv2 as cv
 
 - import  numpy as np
 
 - def line_detection(image):
 
 -     gray=cv.cvtColor(image,cv.COLOR_BGR2GRAY)
 
 -     cv.imshow('gray', gray)
 
 -     gray=cv.GaussianBlur(gray,(11,11),0)
 
 -     cv.imshow('gray2', gray)
 
 -     edge=cv.Canny(gray,50,150,apertureSize=3)
 
 -     cv.imshow('Canny',edge)
 
 -     cv.imwrite('canny2.png',edge)
 
 -     lines=cv.HoughLines(edge,1,np.pi/180,200)
 
 -     print(lines.shape)
 
 -     print(lines)
 
 -     for line in lines:
 
 -         rho,theta=line[0]
 
 -         a=np.cos(theta)
 
 -         b=np.sin(theta)
 
 -         x0=a*rho
 
 -         y0=b*rho
 
 -         x1=int(x0+1000*(-b))
 
 -         y1=int(y0+1000*(a))
 
 -         x2=int(x0-1000*(-b))
 
 -         y2=int(y0-1000*(a))
 
 -         cv.line(image,(x1,y1),(x2,y2),(0,0,255),2)
 
 -     cv.imshow('image-lines',image)
 
 - def line_detect_possible_demo(image):
 
 -     gray=cv.cvtColor(image,cv.COLOR_BGR2GRAY)
 
 -     edge=cv.Canny(gray,50,150,apertureSize=3)
 
 -     lines=cv.HoughLinesP(edge,1,np.pi/180,100,minLineLength=50,maxLineGap=10)
 
 -     for line in lines:
 
 -         x1,y1,x2,y2=line[0]
 
 -         cv.line(image,(x1,y1),(x2,y2),(0,0,255),2)
 
 -     cv.imshow('image_detect_possible_demo',image)
 
  
- src=cv.imread('Traffic_Lanes.jpg')
 
 - #src=cv.imread('Advanced_Sudoku.png')
 
 - cv.imshow('input',src)
 
 - line_detection(src)
 
 - line_detect_possible_demo(src)
 
 - cv.waitKey()
 
  複製代碼 
• lines代表霍夫轉換的回傳資料 
• 內容為 (N,1,2)的三維結構。 
• N代表幾組直線 
• line[0]代表要找每一組直線的長度與角度 
• rho代表長度 
• theta代表角度 
• a代表角度cos值 
• b代表角度sin值 
• x0與y0代表這條線的中位數 
• x0代表x軸內容 
• y0代表y軸內容 
• x1與y1代表這條線的最大值 
• x1代表x軸內容 
• y1代表y軸內容 
• x2與y2代表這條線的最小值 
• x2代表x軸內容 
• y2代表y軸內容 
• 1000這是一個常數,亦可做調整。 • HoughLinesP 機率霍夫轉換 
• 檢測圖像中分段的直線 
• 共有六個參數 
• 1.輸入的影像,必須是灰階影像。 
• 2.rho以像素為單位的距離精度,一般會設定為1。 
• 3.theta,代表偵測時角度設定,math.pi/180.0 代表探索所有可能的角度。 
• 4.偵測的閥值,這個數值愈小,判定出來的直線就會愈多。 
• 5.minLineLength 代表線條最短長度,比這個設定短的都會忽略。 
• 6.maxLineGap 代表線條之間的最大間隔,比這個設定短的會當作一條線。• Gaussian 高斯模糊是針對整張影像進行模糊動作,降低雜訊。 
• 若無法去除雜訊,接著可進行影像型態處理(黑與白),代表影像內容會做調整,Dialation或Erosion的操作。 
• 1.Dialation 膨脹擴展,白色區域會變大 
• 2.Erosion 腐蝕,白色區域會變小 
• 3.Open,先腐蝕再膨脹,可去除小區域的孔洞 
• 4.Close,先膨脹再腐蝕,將小區域孔洞做整合 
• 若灰階色彩中存在非黑非白資訊,亦可用閥值方式查找後進行調整。 
• 這張道路圖片 (Traffic_Lanes.bmp)可以進行多次影像形態處理,藉此消除雜訊  
 
 |   
 
 
 
 |