Python中OpenCV實(shí)現(xiàn)查找輪廓的實(shí)例
本文將結(jié)合實(shí)例代碼,介紹 OpenCV 如何查找輪廓、獲取邊界框。
代碼: contours.py
OpenCV 提供了 findContours 函數(shù)查找輪廓,需要以二值化圖像作為輸入、并指定些選項(xiàng)調(diào)用即可。
我們以下圖作為示例:
二值化圖像
代碼工程 data/
提供了小狗和紅球的二值化掩膜圖像:
其使用預(yù)訓(xùn)練好的實(shí)例分割模型來(lái)生成的,腳本可見(jiàn) detectron2_seg_threshold.py。模型檢出結(jié)果,如下:
模型用的 Mask R-CNN 已有預(yù)測(cè)邊框。但其他模型會(huì)有只出預(yù)測(cè)掩膜的,此時(shí)想要邊框就可以使用 OpenCV 來(lái)提取。
本文代碼也提供了根據(jù)色域來(lái)獲取紅球掩膜的辦法:
import cv2 as cv import numpy as np # 讀取圖像 img = cv.imread(args.image, cv.IMREAD_COLOR) # HSV 閾值,獲取掩膜 def _threshold_hsv(image, lower, upper): hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV) mask = cv.inRange(hsv, lower, upper) result = cv.bitwise_and(image, image, mask=mask) return result, mask _, thres = _threshold_hsv(img, np.array([0,110,190]), np.array([7,255,255])) # 清除小點(diǎn)(可選) kernel = cv.getStructuringElement(cv.MORPH_RECT, (3, 3), (1, 1)) thres = cv.morphologyEx(thres, cv.MORPH_OPEN, kernel)
查找輪廓
# 查找輪廓 # cv.RETR_EXTERNAL: 只查找外部輪廓 contours, hierarchy = cv.findContours( threshold, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE) # 近似輪廓,減點(diǎn)(可選) contours_poly = [cv.approxPolyDP(c, 3, True) for c in contours] # 繪制輪廓 h, w = threshold.shape[:2] drawing = np.zeros((h, w, 3), dtype=np.uint8) for i in range(len(contours)): cv.drawContours(drawing, contours_poly, i, (0, 255, 0), 1, cv.LINE_8, hierarchy)
獲取邊界框
boundingRect
獲取邊界框,并繪制:
for contour in contours_poly: rect = cv.boundingRect(contour) cv.rectangle(drawing, (int(rect[0]), int(rect[1])), (int(rect[0]+rect[2]), int(rect[1]+rect[3])), (0, 255, 0), 2, cv.LINE_8)
minEnclosingCircle
獲取邊界圈,并繪制:
for contour in contours_poly: center, radius = cv.minEnclosingCircle(contour) cv.circle(drawing, (int(center[0]), int(center[1])), int(radius), (0, 255, 0), 2, cv.LINE_8)
參考
OpenCV Tutorials / Image Processing
到此這篇關(guān)于OpenCV實(shí)現(xiàn)查找輪廓的實(shí)例的文章就介紹到這了,更多相關(guān)OpenCV 查找輪廓內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python常見(jiàn)內(nèi)置高效率函數(shù)用法示例
這篇文章主要介紹了Python常見(jiàn)內(nèi)置高效率函數(shù)用法,結(jié)合實(shí)例形式分析了Python中filter()、map()、reduce()、lambda匿名函數(shù)等功能與簡(jiǎn)單使用技巧,需要的朋友可以參考下2018-07-07python獲取微信企業(yè)號(hào)打卡數(shù)據(jù)并生成windows計(jì)劃任務(wù)
由于公司的系統(tǒng)用的是Java版本,開(kāi)通了企業(yè)號(hào)打卡之后又沒(méi)有預(yù)算讓供應(yīng)商做數(shù)據(jù)對(duì)接,所以只能自己搗鼓這個(gè),以下是個(gè)人設(shè)置的一些內(nèi)容,僅供大家參考2019-04-04Python構(gòu)建圖像分類(lèi)識(shí)別器的方法
今天小編就為大家分享一篇Python構(gòu)建圖像分類(lèi)識(shí)別器的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01跟老齊學(xué)Python之正規(guī)地說(shuō)一句話
雖然在第一部分中,已經(jīng)零星涉及到語(yǔ)句問(wèn)題,并且在不同場(chǎng)合也進(jìn)行了一些應(yīng)用。畢竟不那么系統(tǒng)。本部分,就比較系統(tǒng)地介紹python中的語(yǔ)句。2014-09-09Python3 串口接收與發(fā)送16進(jìn)制數(shù)據(jù)包的實(shí)例
今天小編就為大家分享一篇Python3 串口接收與發(fā)送16進(jìn)制數(shù)據(jù)包的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06Python 使用PyQt5 完成選擇文件或目錄的對(duì)話框方法
今天小編就為大家分享一篇Python 使用PyQt5 完成選擇文件或目錄的對(duì)話框方法。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06python爬蟲(chóng)刷訪問(wèn)量 2019 7月
這篇文章主要介紹了python爬蟲(chóng)刷訪問(wèn)量 2019 7月,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08基于Python實(shí)現(xiàn)簡(jiǎn)單的定時(shí)器詳解
所謂定時(shí)器,是指間隔特定時(shí)間執(zhí)行特定任務(wù)的機(jī)制。幾乎所有的編程語(yǔ)言,都有定時(shí)器的實(shí)現(xiàn)。這篇文章主要介紹的是通過(guò)Python實(shí)現(xiàn)的定時(shí)器,感興趣的可以跟隨小編學(xué)習(xí)一下2021-12-12