Python?opencv進行圓形識別(圓檢測)實例代碼
前言
圓形識別(圓檢測)是圖像識別中很常見的一種處理方式,最核心的是cv2.HoughCircles這個函數(shù)實現(xiàn)的圓形檢測。當(dāng)然還有一些其他的處理過程,以下詳述:
1 讀入圖像
首先需要讀取一個圖像文件,將其作為一個變量
img = cv2.imread("save1.jpg", 0) # 0或者cv2.IMREAD_GRAYSCALE 讀取為灰度圖像
img2 = cv2.imread("save1.jpg", 1) # 1或者cv2.IMREAD_COLOR 讀取為為彩色圖像img是一個ndarray,2維結(jié)構(gòu),包含的是灰度化后的圖像信息
img2是一個ndarray,3維結(jié)構(gòu),包含的是RGB彩色圖像信息,比img2多出一個色彩維度
如下圖,img2是3個方括號“[”

2 圖像預(yù)處理
可以對圖像進行裁切,濾波等處理,當(dāng)然不處理也可以直接用,以下展示一下:
裁切
size = 400 x1 = 560 y1 = 200 x2 = x1+size y2 = y1+size cut = img[y1:y2, x1:x2]
濾波加二值化
numpy_img = cv2.adaptiveThreshold(cut, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 15) # 自動閾值二值化
顯示中間處理過程
有時候我們需要直觀的看到中間處理過程的圖像樣貌,可以隨時顯示
cv2.imshow("img", img)
cv2.imshow("cut", cut)
cv2.imshow("numpy_img", numpy_img)
cv2.waitKey(0)注意imshow函數(shù),第一個參數(shù)是要顯示的窗口的標(biāo)題,不得用中文和中文標(biāo)點,必須全英文,否則會亂碼,第2個參數(shù)是待顯示的圖像變量
最后一行可以沒有,如果有的話,程序會在此等待,直到有按鍵動作,程序才繼續(xù)往后運行。這對我們調(diào)試比較有用。
3 圓形識別
# 圓心距 canny閾值 投票數(shù) 最小半徑 最大半徑 circles = cv2.HoughCircles(img, cv2.HOUGH_GRADIENT, 1, 170, param1=100, param2=60, minRadius=60, maxRadius=90)
大概講一下重要的幾個參數(shù),參數(shù)與實際的圖像尺寸相關(guān),不是一個參數(shù)用所有的圖
圓心距:170 圓心距小于此值的圓不檢測,以減小計算量
canny閾值:圖像二值化的參數(shù),根據(jù)實際情況調(diào)整
投票數(shù):一個圓需要至少包含多少個點,才認(rèn)為這是一個圓
最小半徑,最大半徑:在此值之間的圓才是需要的圓,超過范圍不檢測,以減小計算量
檢測完的結(jié)果保存在circles 中
可以自己調(diào)整參數(shù)以觀察結(jié)果
4 顯示檢測結(jié)果
沒啥好說的,代碼很簡單,就是對于每個結(jié)果畫出圓和圓心
arr1 = np.zeros([0, 2], dtype=int) # 創(chuàng)建一個0行, 2列的空數(shù)組
if circles is not None:
circles = np.uint16(np.around(circles)) # 4舍5入, 然后轉(zhuǎn)為uint16
for i in circles[0, :]:
arr1 = np.append(arr1, (i[0], i[1])) # arr1是圓心坐標(biāo)的np數(shù)組
# print(arr1)
cv2.circle(img2, (i[0], i[1]), i[2], (0, 0, 255), 3) # 輪廓
cv2.circle(img2, (i[0], i[1]), 2, (0, 0, 0), 6) # 圓心
5 完整代碼和示例圖像
可以在這里下載:示例代碼下載
總結(jié)
到此這篇關(guān)于Python opencv進行圓形識別(圓檢測)的文章就介紹到這了,更多相關(guān)opencv圓形識別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python使用Scrapy爬蟲框架全站爬取圖片并保存本地的實現(xiàn)代碼
這篇文章主要介紹了Python使用Scrapy爬蟲框架全站爬取圖片并保存本地的實現(xiàn)代碼,需要的朋友可以參考下2018-03-03
Python 中 function(#) (X)格式 和 (#)在Python3.*中的注意事項
這篇文章主要介紹了Python 中 function(#) (X)格式 和 (#)在Python3.*中的注意事項,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2018-11-11

