這期內容當中小編將會給大家帶來有關怎么在Python中使用OpenCV標記圖像區域輪廓,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
創新互聯長期為上千余家客戶提供的網站建設服務,團隊從業經驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯網生態環境。為雙陽企業提供專業的網站設計、成都網站設計,雙陽網站改版等技術服務。擁有十多年豐富建站經驗和眾多成功案例,為您定制開發。import cv2 as cv src = cv.imread("./demo.jpg") gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY) # cv.imshow("src", src) gray = cv.GaussianBlur(gray, (5, 5), 0) edges = cv.Canny(gray, 70, 210) cv.imshow("edged", edges)
輪廓檢測
下面就是檢測圖像輪廓具體位置的代碼了:
contours, hierarchy = cv.findContours(edges.copy(), cv.RETR_LIST, cv.CHAIN_APPROX_SIMPLE) print(f"輪廓數量:{len(contours)}")
在cv.findContours(edges, cv.RETR_LIST, cv.CHAIN_APPROX_SIMPLE)
中,第二個參數使用的是cv.RETR_LIST
,該參數值表示檢測所有輪廓,不建立等級關系,彼此獨立。如果只想獲取輪廓邊緣信息,不關心是否嵌套在另一個輪廓之內,使用該參數值即可。
第三個參數使用的是cv.CHAIN_APPROX_SIMPLE
,表示壓縮水平方向,垂直方向,對角線方向的元素,只保留該方向的終點坐標,例如一個矩形輪廓只需 4 個點來保存輪廓信息,這也是為了后面便于計算。
觀察上圖,可以發現最外側的邊緣面積是較大的,所以依據面積進行排序,依據其他值也可以,獲取面積較大的輪廓。
contours = sorted(contours, key = cv.contourArea, reverse = True)[:3]
對輪廓進行簡單繪制,獲得下圖效果。
cv.drawContours(src,contours,-1,(0,0,255),2)
遍歷輪廓,計算輪廓近似
先看代碼:
# 遍歷輪廓 for c in contours: # 計算輪廓近似 peri = cv.arcLength(c, True) approx = cv.approxPolyDP(c, 0.02 * peri, True)
一個新的函數cv.arcLength
,該函數的原型如下:
retval = cv2.arcLength(curve, closed)
該函數用于計算輪廓的周長。
下面的cv.approxPolyDP
函數原型如下:
approxCurve = cv2.approxPolyDP(curve, epsilon, closed[, approxCurve])
函數參數如下:
curve
:源圖像的某個輪廓;
epsilon
:距離值,表示多邊形的輪廓接近實際輪廓的程度,值越小,越精確;
closed
:輪廓是否閉合。
最重要的參數就是epsilon
簡單記憶為:該值越小,得到的多邊形角點越多,輪廓越接近實際輪廓,該參數是一個準確度參數。
該函數返回值為輪廓近似多邊形的角點。
最后判斷,當上文返回的角點為 4 的時候,提取輪廓,代碼如下:
# 遍歷輪廓 for c in contours: # 計算輪廓近似 peri = cv.arcLength(c, True) approx = cv.approxPolyDP(c, 0.02 * peri, True) # 當恰好是 4 個角點的時候,獲取輪廓。 if len(approx) == 4: screen_cnt = approx break # 結果顯示 cv.drawContours(src, [screen_cnt], -1, (0, 0, 255), 2)
更換圖片,進行再次輪廓檢測,注意修改輪廓近似部分代碼即可。
# 遍歷輪廓 for c in contours: # 計算輪廓近似 approx = cv.approxPolyDP(c, 30, True) if len(approx) == 4: screen_cnt = approx break
上述就是小編為大家分享的怎么在Python中使用OpenCV標記圖像區域輪廓了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注創新互聯行業資訊頻道。
新聞標題:怎么在Python中使用OpenCV標記圖像區域輪廓-創新互聯
URL標題:http://vcdvsql.cn/article8/cecoip.html
成都網站建設公司_創新互聯,為您提供商城網站、網站改版、外貿網站建設、關鍵詞優化、全網營銷推廣、虛擬主機
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯