日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OpenCV 霍夫变换

發布時間:2024/3/26 编程问答 80 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenCV 霍夫变换 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

一、霍夫直線變換
1. cv2.HoughLines()
1. cv2.HoughLinesP()
二、霍夫圓環變化


????????霍夫變化是一種在圖像中尋找直線、圓形以及其他簡單形狀的方法。霍夫變換采用類似于投票的方式來獲取當前圖像內的形狀集合,該變換由 Paul Hough(霍夫)1962 年首次提出。最初霍夫變換只能用于檢測直線,經過發展后,霍夫變換不僅能識別直線,還能識別其他簡單的圖形結構,常見的有圓、橢圓等。
一、霍夫直線變換

????OpenCV 提供了函數 cv2.HoughLines()和函數 cv2.HoughLinesP()用來實現霍夫直線變換。

1. cv2.HoughLines()

????OpenCV 提供了函數 cv2.HoughLines() 用來實現霍夫直線變換,該函數要求所操作的源圖像是一個二值圖像,所以在進行霍夫變換之前要先將源圖像進行二值化,或者進行 Canny 邊緣檢測。

函數 cv2.HoughLines() 的語法格式為:

????lines = cv2.HoughLines(image, rho, theta, threshold)

? image 是輸入圖像,即源圖像,必須是8位的單通道二值圖像。如果是其他類型的圖像,再進行霍夫變換之前,需要將其修改為指定格式
? rho 為以像素為單位的距離r的進度。一般情況下,使用的進度是1
? theta 為角度θ的精度。一般情況下,使用的精度是π/180,表示要搜索所有可能的角度
? threshold 是閾值。閾值越小,就會得到較多的直線;閾值較大,就會得到較小的直線
? 返回值 lines 中的每一個元素都是一對浮點數,表示檢測到的直線的參數,即(r,θ),是numpy.ndarray類型

???函數cv2.HoughLines() 檢測到的圖像中的直線而不是線段,因此檢測到的直線是沒有端點的。所以,我們在進行霍夫直線變換時所繪制的直線都是穿越整幅圖像的。

1. cv2.HoughLinesP()

??概率霍夫變換對基本霍夫變換算法進行了一些修正,是霍夫變換算法的優化。他沒有考慮所有的點。相反,他只需要一個足以進行線檢測是隨機點集合即可。

函數 cv2.HoughLines() 的語法格式為:

????lines = cv2.HoughLinesP(image, rho, theta, threshold, minLineLength, maxLineGap)

? minLineLength 用來控制“接受直線的最小長度”的值,默認為0
? maxLineGap 用來控制接受共線線段之間的最小間隔,即在一條線中兩點的最大間隔

代碼如下(示例):

import cv2
import numpy as np
img = cv2.imread("12.png") ?
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) # 轉為灰度圖?
edge = cv2.Canny (gray, 50, 150) # 畫邊框
minLineLength = 10
maxLineGap = 30
lines=cv2.HoughLinesP(edge,1,np.pi/180,50,minLineLength,maxLineGap )?
for line in lines:
? ? x1,y1,x2,y2 = line[0]
? ? cv2.line(img,(x1,y1),(x2,y2),(0,255,0),2)?
cv2.imshow("img ",img)
cv2.imshow("edge",edge)?
cv2.waitKey()
cv2.destroyAllWindows()


二、霍夫圓環變化

在 OpenCV 中,實現霍夫圓變換的是函數 cv2.HoughCircles() ,該函數將 Canny 邊緣檢測和霍夫變換結合。其語法格式為:

????circles= cv2.HoughCircles(image, method, dp, minDist, param1,param2,minRadius, maxRadius)

? method 該參數代表的是霍夫圓檢測中兩輪檢測所使用的方法
? dp 累機器分辨率,他是一個分割比率,用來制定圖像分辨率與圓心累加器分辨率的比例
? param1 該參數是缺省的,在缺省時默認值為100
? param2 圓心位置必須收到的投票數。只有在第一輪刪選過程中,投票數超過該值的圓,才有資格進入第二輪刪選
? minDist 圓心間的最小間距
? minRadius 圓半徑的最小值
? maxRadius 圓半徑的最大值
? circles 返回值,由圓心坐標和半徑構成的 numpy.ndarray

代碼如下(示例):

import cv2
import numpy as np
img = cv2.imread("12.png") ?
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) # 轉為灰度圖?
edge = cv2.Canny (gray, 50, 150) # 畫邊框
circles=cv2.HoughCircles(edge,cv2.HOUGH_GRADIENT,1.30,50,param1=40,param2=20,\
?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?minRadius=5,maxRadius=100)?
if not circles is None:
? ? circles = np.uint16(np.around(circles))
? ? for circle in circles:
? ? ? ? x,y,r = circle[0]
? ? ? ? cv2.circle(img,(x,y),r,(0,0,255),2)?
cv2.imshow("img ",img)
cv2.imshow("edge",edge)?
cv2.waitKey()
cv2.destroyAllWindows()

總結

以上是生活随笔為你收集整理的OpenCV 霍夫变换的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。