国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

OpenCV-Python實現輪廓檢測實例分析

2020-02-16 11:27:40
字體:
來源:轉載
供稿:網友

相比C++而言,Python適合做原型。本系列的文章介紹如何在Python中用OpenCV圖形庫,以及與C++調用相應OpenCV函數的不同之處。這篇文章介紹在Python中使用OpenCV檢測并繪制輪廓。

提示:

轉載請詳細注明原作者及出處,謝謝!

本文介紹在OpenCV-Python中檢測并繪制輪廓的方法。

本文不介詳細的理論知識,讀者可從其他資料中獲取相應的背景知識。筆者推薦清華大學出版社的《圖像處理與計算機視覺算法及應用(第2版)》。

輪廓檢測

輪廓檢測也是圖像處理中經常用到的。OpenCV-Python接口中使用cv2.findContours()函數來查找檢測物體的輪廓。

實現

使用方式如下:

import cv2  img = cv2.imread('D://test//contour.jpg') gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) ret, binary = cv2.threshold(gray,127,255,cv2.THRESH_BINARY)  contours, hierarchy = cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) cv2.drawContours(img,contours,-1,(0,0,255),3)  cv2.imshow("img", img) cv2.waitKey(0) 

需要注意的是cv2.findContours()函數接受的參數為二值圖,即黑白的(不是灰度圖),所以讀取的圖像要先轉成灰度的,再轉成二值圖,參見4、5兩行。第六行是檢測輪廓,第七行是繪制輪廓。

結果

原圖如下:

檢測結果如下:

注意,findcontours函數會“原地”修改輸入的圖像。這一點可通過下面的語句驗證:

cv2.imshow("binary", binary) contours, hierarchy = cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) cv2.imshow("binary2", binary) 

執行這些語句后會發現原圖被修改了。

cv2.findContours()函數

函數的原型為

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

返回兩個值:contours:hierarchy。

參數

第一個參數是尋找輪廓的圖像;

第二個參數表示輪廓的檢索模式,有四種(本文介紹的都是新的cv2接口):
cv2.RETR_EXTERNAL表示只檢測外輪廓
cv2.RETR_LIST檢測的輪廓不建立等級關系
cv2.RETR_CCOMP建立兩個等級的輪廓,上面的一層為外邊界,里面的一層為內孔的邊界信息。如果內孔內還有一個連通物體,這個物體的邊界也在頂層。
cv2.RETR_TREE建立一個等級樹結構的輪廓。

第三個參數method為輪廓的近似辦法
cv2.CHAIN_APPROX_NONE存儲所有的輪廓點,相鄰的兩個點的像素位置差不超過1,即max(abs(x1-x2),abs(y2-y1))==1

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 望城县| 清苑县| 保康县| 鄂尔多斯市| 兴安盟| 呈贡县| 太保市| 保山市| 化德县| 临沭县| 开平市| 山阳县| 雷波县| 栾川县| 淳安县| 宿迁市| 银川市| 琼结县| 柞水县| 大丰市| 原平市| 阳西县| 平度市| 秦安县| 新乐市| 沅陵县| 五峰| 盖州市| 翁牛特旗| 阿尔山市| 神农架林区| 慈利县| 电白县| 栖霞市| 托克逊县| 三穗县| 和政县| 涞水县| 松潘县| 伊宁市| 镇坪县|