Python?opencv進(jìn)行圓形識(shí)別(圓檢測(cè))實(shí)例代碼
前言
圓形識(shí)別(圓檢測(cè))是圖像識(shí)別中很常見的一種處理方式,最核心的是cv2.HoughCircles這個(gè)函數(shù)實(shí)現(xiàn)的圓形檢測(cè)。當(dāng)然還有一些其他的處理過程,以下詳述:
1 讀入圖像
首先需要讀取一個(gè)圖像文件,將其作為一個(gè)變量
img = cv2.imread("save1.jpg", 0) # 0或者cv2.IMREAD_GRAYSCALE 讀取為灰度圖像 img2 = cv2.imread("save1.jpg", 1) # 1或者cv2.IMREAD_COLOR 讀取為為彩色圖像
img是一個(gè)ndarray,2維結(jié)構(gòu),包含的是灰度化后的圖像信息
img2是一個(gè)ndarray,3維結(jié)構(gòu),包含的是RGB彩色圖像信息,比img2多出一個(gè)色彩維度
如下圖,img2是3個(gè)方括號(hào)“[”
2 圖像預(yù)處理
可以對(duì)圖像進(jìn)行裁切,濾波等處理,當(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) # 自動(dòng)閾值二值化
顯示中間處理過程
有時(shí)候我們需要直觀的看到中間處理過程的圖像樣貌,可以隨時(shí)顯示
cv2.imshow("img", img) cv2.imshow("cut", cut) cv2.imshow("numpy_img", numpy_img) cv2.waitKey(0)
注意imshow函數(shù),第一個(gè)參數(shù)是要顯示的窗口的標(biāo)題,不得用中文和中文標(biāo)點(diǎn),必須全英文,否則會(huì)亂碼,第2個(gè)參數(shù)是待顯示的圖像變量
最后一行可以沒有,如果有的話,程序會(huì)在此等待,直到有按鍵動(dòng)作,程序才繼續(xù)往后運(yùn)行。這對(duì)我們調(diào)試比較有用。
3 圓形識(shí)別
# 圓心距 canny閾值 投票數(shù) 最小半徑 最大半徑 circles = cv2.HoughCircles(img, cv2.HOUGH_GRADIENT, 1, 170, param1=100, param2=60, minRadius=60, maxRadius=90)
大概講一下重要的幾個(gè)參數(shù),參數(shù)與實(shí)際的圖像尺寸相關(guān),不是一個(gè)參數(shù)用所有的圖
圓心距:170 圓心距小于此值的圓不檢測(cè),以減小計(jì)算量
canny閾值:圖像二值化的參數(shù),根據(jù)實(shí)際情況調(diào)整
投票數(shù):一個(gè)圓需要至少包含多少個(gè)點(diǎn),才認(rèn)為這是一個(gè)圓
最小半徑,最大半徑:在此值之間的圓才是需要的圓,超過范圍不檢測(cè),以減小計(jì)算量
檢測(cè)完的結(jié)果保存在circles 中
可以自己調(diào)整參數(shù)以觀察結(jié)果
4 顯示檢測(cè)結(jié)果
沒啥好說的,代碼很簡(jiǎn)單,就是對(duì)于每個(gè)結(jié)果畫出圓和圓心
arr1 = np.zeros([0, 2], dtype=int) # 創(chuàng)建一個(gè)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進(jìn)行圓形識(shí)別(圓檢測(cè))的文章就介紹到這了,更多相關(guān)opencv圓形識(shí)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python使用Scrapy爬蟲框架全站爬取圖片并保存本地的實(shí)現(xiàn)代碼
這篇文章主要介紹了Python使用Scrapy爬蟲框架全站爬取圖片并保存本地的實(shí)現(xiàn)代碼,需要的朋友可以參考下2018-03-03Python同時(shí)向控制臺(tái)和文件輸出日志logging的方法
這篇文章主要介紹了Python同時(shí)向控制臺(tái)和文件輸出日志logging的方法,涉及Python日志模塊的相關(guān)使用技巧,需要的朋友可以參考下2015-05-05Python基礎(chǔ)之高級(jí)變量類型實(shí)例詳解
這篇文章主要介紹了Python基礎(chǔ)之高級(jí)變量類型,結(jié)合實(shí)例形式詳細(xì)分析了Python元組、字典、字符串、公共方法以及遍歷、切片等常見操作技巧,需要的朋友可以參考下2020-01-01Python 中 function(#) (X)格式 和 (#)在Python3.*中的注意事項(xiàng)
這篇文章主要介紹了Python 中 function(#) (X)格式 和 (#)在Python3.*中的注意事項(xiàng),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-11-11