TShopping

 找回密碼
 註冊
搜索
查看: 133|回復: 0

[教學] python 霍夫轉換語法說明

[複製鏈接]
發表於 2021-4-15 23:05:17 | 顯示全部樓層 |閱讀模式
 
Push to Facebook Push to Plurk  
原始圖

python 霍夫轉換

python 霍夫轉換



完整代碼

  1. import  cv2 as cv
  2. import  numpy as np
  3. def line_detection(image):
  4.     gray=cv.cvtColor(image,cv.COLOR_BGR2GRAY)
  5.     cv.imshow('gray', gray)
  6.     gray=cv.GaussianBlur(gray,(11,11),0)
  7.     cv.imshow('gray2', gray)
  8.     edge=cv.Canny(gray,50,150,apertureSize=3)
  9.     cv.imshow('Canny',edge)
  10.     cv.imwrite('canny2.png',edge)
  11.     lines=cv.HoughLines(edge,1,np.pi/180,200)
  12.     print(lines.shape)
  13.     print(lines)
  14.     for line in lines:
  15.         rho,theta=line[0]
  16.         a=np.cos(theta)
  17.         b=np.sin(theta)
  18.         x0=a*rho
  19.         y0=b*rho
  20.         x1=int(x0+1000*(-b))
  21.         y1=int(y0+1000*(a))
  22.         x2=int(x0-1000*(-b))
  23.         y2=int(y0-1000*(a))
  24.         cv.line(image,(x1,y1),(x2,y2),(0,0,255),2)
  25.     cv.imshow('image-lines',image)
  26. def line_detect_possible_demo(image):
  27.     gray=cv.cvtColor(image,cv.COLOR_BGR2GRAY)
  28.     edge=cv.Canny(gray,50,150,apertureSize=3)
  29.     lines=cv.HoughLinesP(edge,1,np.pi/180,100,minLineLength=50,maxLineGap=10)
  30.     for line in lines:
  31.         x1,y1,x2,y2=line[0]
  32.         cv.line(image,(x1,y1),(x2,y2),(0,0,255),2)
  33.     cv.imshow('image_detect_possible_demo',image)

  34. src=cv.imread('Traffic_Lanes.jpg')
  35. #src=cv.imread('Advanced_Sudoku.png')
  36. cv.imshow('input',src)
  37. line_detection(src)
  38. line_detect_possible_demo(src)
  39. 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)可以進行多次影像形態處理,藉此消除雜訊



 

臉書網友討論
您需要登錄後才可以回帖 登錄 | 註冊 |

本版積分規則



Archiver|手機版|小黑屋|免責聲明|TShopping

GMT+8, 2021-5-13 04:31 , Processed in 0.061928 second(s), 24 queries .

本論壇言論純屬發表者個人意見,與 TShopping綜合論壇 立場無關 如有意見侵犯了您的權益 請寫信聯絡我們。

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表