91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python Opencv實現圖像輪廓識別功能

發布時間:2020-10-08 15:41:04 來源:腳本之家 閱讀:508 作者:戲志才 欄目:開發技術

本文實例為大家分享了python opencv識別圖像輪廓的具體代碼,供大家參考,具體內容如下

要求:用矩形或者圓形框住圖片中的云朵(不要求全部框出)

Python Opencv實現圖像輪廓識別功能

輪廓檢測

Opencv-Python接口中使用cv2.findContours()函數來查找檢測物體的輪廓。

import cv2

img = cv2.imread('cloud.jpg')
# 灰度圖像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 二值化
ret, binary = cv2.threshold(gray, 175, 255, cv2.THRESH_BINARY)
img1, contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

# 以圓形框出云朵
# for i in range(len(contours)):
# (x, y), radius = cv2.minEnclosingCircle(contours[i])
# center = (int(x), int(y))
# radius = int(radius)
# img = cv2.circle(img, center, radius, (0, 255, 0), 2)

#以云朵邊界輪廓框出云朵
cv2.drawContours(img, contours, -1, (0, 0, 255), 3)

cv2.imshow("img", img)
cv2.waitKey(0)

Python Opencv實現圖像輪廓識別功能

需要注意的是cv2.findContours()函數接受的參數為二值圖,即黑白的(不是灰度圖),所以讀取的圖像要先轉成灰度的,再轉成二值圖。

cv2.findContours()函數

函數的原型為:

cv2.findContours(image, mode, method[, contours[, hierarchy[, offset ]]]) 

返回兩個值:contours,hierarchy。注:opencv3會返回三個值,分別是img, countours, hierarchy

參數說明

第一個參數是尋找輪廓的圖像
第二個參數表示輪廓的檢索模式,有四種:
1. cv2.RETR_EXTERNAL表示只檢測外輪廓
2. cv2.RETR_LIST檢測的輪廓不建立等級關系
3. cv2.RETR_CCOMP建立兩個等級的輪廓,上面的一層為外邊界,里面的一層為內孔的邊界信息。如果內孔內還有一個連通物體,這個物體的邊界也在頂層。
4. cv2.RETR_TREE建立一個等級樹結構的輪廓。
第三個參數method為輪廓的近似辦法
cv2.CHAIN_APPROX_NONE存儲所有的輪廓點,相鄰的兩個點的像素位置差不超過1,
即max(abs(x1−x2),abs(y2−y1))==1max(abs(x1−x2),abs(y2−y1))==1
cv2.CHAIN_APPROX_SIMPLE壓縮水平方向,垂直方向,對角線方向的元素,只保留該方向的終點坐標,例如一個矩形輪廓只需4個點來保存輪廓信息
cv2.CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS使用teh-Chinl chain 近似算法

返回值

cv2.findContours()函數返回兩個值,一個是輪廓本身,還有一個是每條輪廓對應的屬性。

contour返回值

cv2.findContours()函數首先返回一個list,list中每個元素都是圖像中的一個輪廓,用numpy中的ndarray表示。這個概念非常重要。在下面drawContours中會看見。可以打印觀察contours的數據類型。

print (type(contours)) 
print (type(contours[0])) 
print (len(contours)) 

hierarchy返回值

該函數還可返回一個可選的hiararchy結果,這是一個ndarray,其中的元素個數和輪廓個數相同,每個輪廓contours[i]對應4個hierarchy元素hierarchy[i][0] ~hierarchy[i][3],分別表示后一個輪廓、前一個輪廓、父輪廓、內嵌輪廓的索引編號,如果沒有對應項,則該值為負數。

Python Opencv實現圖像輪廓識別功能

輪廓的繪制

OpenCV中通過cv2.drawContours在圖像上繪制輪廓。

cv2.drawContours(image, contours, contourIdx, color[, thickness[, lineType[, hierarchy[, maxLevel[, offset ]]]]]) 

第一個參數是指明在哪幅圖像上繪制輪廓;
第二個參數是輪廓本身,在Python中是一個list;
第三個參數指定繪制輪廓list中的哪條輪廓,如果是-1,則繪制其中的所有輪廓。
后面的參數很簡單。其中thickness表明輪廓線的寬度,如果是-1(cv2.FILLED),則為填充模式。

Python Opencv實現圖像輪廓識別功能

OpenCV中通過cv2.minEnclosingCircle()可以幫我們找到一個對象的外接圓。它是所有能夠包括對象的圓中面積最小的一個。

(x,y),radius = cv2.minEnclosingCircle(contours[i])
center = (int(x),int(y))
radius = int(radius)
img = cv2.circle(img,center,radius,(0,255,0),2)

Python Opencv實現圖像輪廓識別功能

本文已被收錄到專題《python圖片處理操作》 ,歡迎大家點擊學習更多精彩內容。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阿克陶县| 资源县| 调兵山市| 佛坪县| 兴城市| 塔河县| 台前县| 海安县| 阿鲁科尔沁旗| 闽侯县| 左云县| 安岳县| 盐亭县| 庆安县| 百色市| 金川县| 治多县| 建昌县| 桦南县| 蓬莱市| 洱源县| 大英县| 湄潭县| 万源市| 韶山市| 大田县| 河曲县| 库伦旗| 综艺| 永靖县| 双柏县| 庐江县| 上饶市| 沂水县| 伊吾县| 松潘县| 松溪县| 福海县| 平武县| 额敏县| 鹤岗市|