OpenCV霍夫圓變換cv2.HoughCircles()
這篇博客將學(xué)習(xí)如何使用霍夫圓變換在圖像中找到圓圈,OpenCV使用cv2.HoughCircles()實(shí)現(xiàn)霍夫圓變換。
circles = cv2.HoughCircles(img,
img: 待檢測(cè)的灰度圖cv2.HOUGH_GRADIENT:檢測(cè)的方法,霍夫梯度1:檢測(cè)的圓與原始圖像具有相同的大小,dp=2,檢測(cè)的圓是原始圖像的一半20:檢測(cè)到的相鄰圓的中心的最小距離(如果參數(shù)太小,除了一個(gè)真實(shí)的圓外,還可能會(huì)錯(cuò)誤地檢測(cè)到多個(gè)相鄰圓。如果太大,可能會(huì)漏掉一些圓。)param1:在#HOUGHŠu梯度的情況下,它是較高的. 兩個(gè)閾值傳遞到Canny邊緣檢測(cè)器(較低的一個(gè)小兩倍)。param2:在#HOUGHŠu梯度的情況下,它是檢測(cè)階段圓心的累加器閾值。它越小,就越可能檢測(cè)到假圓;minRadius:最小圓半徑maxRadius:最大圓半徑,如果<=0,則使用最大圖像尺寸。如果<0,則返回沒(méi)有找到半徑的中心。
cv2.HOUGH_GRADIENT, 1, 20,
param1=50, param2=40, minRadius=25, maxRadius=0)
1. 效果圖
原始圖 VS 檢測(cè)圓效果圖如下:
如下右圖可以看到3個(gè)外側(cè)圓綠色,圓心紅色被成功檢測(cè)到;
圓的最小半徑設(shè)置由25調(diào)整為10,也可能會(huì)錯(cuò)誤的檢測(cè)到圓,效果圖如下:
檢測(cè)圓半徑的閾值(param2設(shè)置35)的結(jié)果,最小圓半徑設(shè)置10,也可能會(huì)錯(cuò)誤的檢測(cè)到圓,效果圖如下:
2. 源碼
# 霍夫圓檢測(cè) import cv2 import numpy as np cimg = cv2.imread('opencv_logo_350.jpg') cv2.imshow("origin", cimg) cv2.waitKey(0) img = cv2.cvtColor(cimg,cv2.COLOR_BGR2GRAY) img = cv2.medianBlur(img, 5) cimg = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR) # - img: 待檢測(cè)的灰度圖 # - cv2.HOUGH_GRADIENT:檢測(cè)的方法,霍夫梯度 # - 1:檢測(cè)的圓與原始圖像具有相同的大小,dp=2,檢測(cè)的圓是原始圖像的一半 # - 20:檢測(cè)到的圓的中心的最小距離(如果參數(shù)為太小,除了一個(gè)真實(shí)的圓外,還可能會(huì)錯(cuò)誤地檢測(cè)到多個(gè)相鄰圓。如果太大,可能會(huì)漏掉一些圓。) # - param1:在#HOUGHŠu梯度的情況下,它是較高的. 兩個(gè)閾值傳遞到Canny邊緣檢測(cè)器(較低的一個(gè)小兩倍)。 # - param2:在#HOUGHŠu梯度的情況下,它是檢測(cè)階段圓心的累加器閾值。它越小,就越可能檢測(cè)到假圓; # - minRadius:最小圓半徑,也可能會(huì)檢測(cè)到假圓 # - maxRadius:最大圓半徑,如果<=0,則使用最大圖像尺寸。如果<0,則返回沒(méi)有找到半徑的中心。 circles = cv2.HoughCircles(img, cv2.HOUGH_GRADIENT, 1, 20, param1=50, param2=40, minRadius=0, maxRadius=0) # 最小圓半徑設(shè)置不合適,也可能會(huì)檢測(cè)到假圓 # circles = cv2.HoughCircles(img, cv2.HOUGH_GRADIENT, 1, 20, # param1=50, param2=40, minRadius=0, maxRadius=0) # circles = cv2.HoughCircles(img, cv2.HOUGH_GRADIENT, 1, 20, # param1=50, param2=30, minRadius=10, maxRadius=0) circles = np.uint16(np.around(circles)) print(len(circles)) print(circles) for i in circles[0, :]: # 繪制外圈圓(藍(lán)色) cv2.circle(cimg, (i[0], i[1]), i[2], (0, 255, 0), 2) # 繪制圓心(紅色) cv2.circle(cimg, (i[0], i[1]), 2, (0, 0, 255), 3) cv2.imshow('detected circles', cimg) cv2.waitKey(0) cv2.destroyAllWindows()
參考
到此這篇關(guān)于OpenCV霍夫圓變換cv2.HoughCircles()的文章就介紹到這了,更多相關(guān)OpenCV霍夫圓變換內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python 數(shù)據(jù)庫(kù)查詢返回list或tuple實(shí)例
這篇文章主要介紹了python 數(shù)據(jù)庫(kù)查詢返回list或tuple實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-05-05Python中input和raw_input的一點(diǎn)區(qū)別
這篇文章主要介紹了Python中input和raw_input的一點(diǎn)區(qū)別,它們都是用來(lái)讀取控制臺(tái)輸入的函數(shù),需要的朋友可以參考下2014-10-10python計(jì)算機(jī)視覺(jué)opencv圖像金字塔輪廓及模板匹配
這篇文章主要為大家介紹了python計(jì)算機(jī)視覺(jué)opencv圖像金字塔圖像輪廓及模板匹配的學(xué)習(xí)講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-11-11python3.6環(huán)境安裝+pip環(huán)境配置教程圖文詳解
這篇文章主要介紹了python3.6環(huán)境安裝+pip環(huán)境配置教程圖文詳解,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-06-06pycharm轉(zhuǎn)移緩存目錄的實(shí)現(xiàn)
Pycharm在使用過(guò)程中,Pycharm會(huì)生成大量緩存文件,而這些緩存文件默認(rèn)存儲(chǔ)在C盤的用戶目錄里面,導(dǎo)致C盤空間被占用,本文主要介紹了pycharm轉(zhuǎn)移緩存目錄,感興趣的可以了解一下2023-10-10基于Python編寫(xiě)一個(gè)計(jì)算器程序,實(shí)現(xiàn)簡(jiǎn)單的加減乘除和取余二元運(yùn)算
這篇文章主要介紹了基于Python編寫(xiě)一個(gè)計(jì)算器程序,實(shí)現(xiàn)簡(jiǎn)單的加減乘除和取余二元運(yùn)算,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08