最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何使用Python?OpenCV提取物體輪廓詳解

 更新時間:2022年05月11日 14:58:36   作者:wzw12315  
圖像的輪廓檢測不論是機器視覺還是其他方面都有較大作用,下面這篇文章主要給大家介紹了關于如何使用Python?OpenCV提取物體輪廓的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下

通常提取物體的輪廓時,圖像都存在噪聲,提取效果并不理想。如提取下圖的輪廓時,

提取代碼:

import cv2
 
img = cv2.imread("mouse.png")
cv2.imshow("origin",img)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret,binary = cv2.threshold(gray,128,255,cv2.THRESH_BINARY)
cv2.imshow("binary",binary)
 
contours, hierarchy = cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(img,contours,-1,(0,0,255),3)
cv2.imshow("result", img)
cv2.waitKey(0)

 提取效果:

可以看出存在非常嚴重的噪聲干擾。因此,提取輪廓之前需要過濾噪聲的干擾。

首先,進行對圖像進行均值濾波(低通濾波),去除噪聲

blured = cv2.blur(img,(5,5))
cv2.imshow("blur",blured)

 

使用floodfill來去掉目標周圍的背景,泛洪填充類始于ps的魔棒工具,這里用來清除背景。

mask = np.zeros((h+2, w+2), np.uint8)       #掩碼長和寬都比輸入圖像多兩個像素點,泛洪填充不會超出掩碼的非零邊緣  
#進行泛洪填充
cv2.floodFill(blured, mask, (10,10), (255,255,255), (2,2,2),(3,3,3),8)
cv2.imshow("floodfill", blured)

  floodFill函數(shù)解析

  • img:為待使用泛洪算法的圖像
  • mask:為掩碼層,使用掩碼可以規(guī)定是在哪個區(qū)域使用該算法,如果是對于完整圖像都要使用,則掩碼層大小為原圖行數(shù)+2,列數(shù)+2.是一個二維的0矩陣,邊緣一圈會在使用算法是置為1。而只有對于掩碼層上對應為0的位置才能泛洪,所以掩碼層初始化為0矩?!綿type:np.uint8】
  • seed:為泛洪算法的種子點,也是根據(jù)該點的像素判斷決定和其相近顏色的像素點,是否被泛洪處理。
  • newvalue:是對于泛洪區(qū)域新賦的值(B,G,R)
  • (loDiff1,loDiff2,loDiff3):是相對于seed種子點像素可以往下的像素值,即seed(B0,G0,R0),泛洪區(qū)域下界為(B0-loDiff1,G0-loDiff2,R0-loDiff3)
  • (upDiff1,upDiff2,upDiff3):是相對于seed種子點像素可以往上的像素值,即seed(B0,G0,R0),泛洪區(qū)域上界為(B0+upDiff1,G0+upDiff2,R0+upDiff3)
  • flag:為泛洪算法的處理模式:
  •     低八位 控制算法的連通性,是以seed點為中心,接著判斷周圍的幾個像素點,再將泛洪區(qū)域像素點周圍的幾個像素點進行考慮。 一般為4,8;默認為4
  •     中間八位 與掩碼層賦值密切相關,一般使用(255<<8)使中間8位全位1,則值為255,也就是掩碼層對應原圖的泛洪區(qū)域的部分被由原來的初值0賦值成255,如果中間8位為0,則賦值為1.
  •     高八位 由opencv宏參數(shù)指定
    • cv2.FLOODFILL_FIXED_RANGE:改變圖像,填充newvalue
    • cv2.FLOODFILL_MASK_ONLY:不改變原圖像,也就是newvalue參數(shù)失去作用,而是改變對應區(qū)域的掩碼,設為中間八位的值

然后轉(zhuǎn)換成灰度圖

 gray = cv2.cvtColor(blured,cv2.COLOR_BGR2GRAY)  
 cv2.imshow("gray", gray)  

此時目標圖像周圍有寫不光滑,還有一些噪聲,因此進行開閉運算,得到比較光滑的目標

 #定義結構元素  
 kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(50, 50))
 #開閉運算,先開運算去除背景噪聲,再繼續(xù)閉運算填充目標內(nèi)的孔洞
 opened = cv2.morphologyEx(gray, cv2.MORPH_OPEN, kernel)  
 closed = cv2.morphologyEx(opened, cv2.MORPH_CLOSE, kernel)  
 cv2.imshow("closed", closed) 

接著轉(zhuǎn)換成二值圖以便于獲取圖像的輪廓

最后進行輪廓提取,抓取到目標

 #找到輪廓
 _,contours, hierarchy = cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)  
 #繪制輪廓
 cv2.drawContours(img,contours,-1,(0,0,255),3)  
 #繪制結果
 cv2.imshow("result", img)

全部代碼:

#coding=utf-8
import cv2
import numpy as np
 
img = cv2.imread("temp.jpg")                #載入圖像
h, w = img.shape[:2]                        #獲取圖像的高和寬
cv2.imshow("Origin", img)                   #顯示原始圖像
 
blured = cv2.blur(img,(5,5))                #進行濾波去掉噪聲
cv2.imshow("Blur", blured)                  #顯示低通濾波后的圖像
 
mask = np.zeros((h+2, w+2), np.uint8)       #掩碼長和寬都比輸入圖像多兩個像素點,滿水填充不會超出掩碼的非零邊緣
#進行泛洪填充
cv2.floodFill(blured, mask, (w-1,h-1), (255,255,255), (2,2,2),(3,3,3),8)
cv2.imshow("floodfill", blured)
 
#得到灰度圖
gray = cv2.cvtColor(blured,cv2.COLOR_BGR2GRAY)
cv2.imshow("gray", gray)
 
 
#定義結構元素
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(50, 50))
#開閉運算,先開運算去除背景噪聲,再繼續(xù)閉運算填充目標內(nèi)的孔洞
opened = cv2.morphologyEx(gray, cv2.MORPH_OPEN, kernel)
closed = cv2.morphologyEx(opened, cv2.MORPH_CLOSE, kernel)
cv2.imshow("closed", closed)
 
#求二值圖
ret, binary = cv2.threshold(closed,250,255,cv2.THRESH_BINARY)
cv2.imshow("binary", binary)
 
#找到輪廓
_,contours, hierarchy = cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
#繪制輪廓
 
cv2.drawContours(img,contours,-1,(0,0,255),3)
#繪制結果
cv2.imshow("result", img)
 
cv2.waitKey(0)
cv2.destroyAllWindows()

總結

到此這篇關于如何使用Python OpenCV提取物體輪廓的文章就介紹到這了,更多相關Python OpenCV提取物體輪廓內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python結合Selenium簡單實現(xiàn)Web自動化測試

    Python結合Selenium簡單實現(xiàn)Web自動化測試

    這篇文章是入門級別的應用Python + Selenium進行自動化測試,包括環(huán)境搭建及簡單的實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Pytorch使用VGG16模型進行預測貓狗二分類實戰(zhàn)

    Pytorch使用VGG16模型進行預測貓狗二分類實戰(zhàn)

    VGG16是Visual Geometry Group的縮寫,它的名字來源于提出該網(wǎng)絡的實驗室,本文我們將使用PyTorch來實現(xiàn)VGG16網(wǎng)絡,用于貓狗預測的二分類任務,我們將對VGG16的網(wǎng)絡結構進行適當?shù)男薷?以適應我們的任務,需要的朋友可以參考下
    2023-08-08
  • 完美解決keras保存好的model不能成功加載問題

    完美解決keras保存好的model不能成功加載問題

    這篇文章主要介紹了完美解決keras保存好的model不能成功加載問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • 解析Python的縮進規(guī)則的使用

    解析Python的縮進規(guī)則的使用

    這篇文章主要介紹了解析Python的縮進規(guī)則的使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • Python獲取秒級時間戳與毫秒級時間戳的示例代碼

    Python獲取秒級時間戳與毫秒級時間戳的示例代碼

    這篇文章主要介紹了Python獲取秒級時間戳與毫秒級時間戳的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • pycharm遠程連接服務器調(diào)試tensorflow無法加載問題

    pycharm遠程連接服務器調(diào)試tensorflow無法加載問題

    最近打算在win系統(tǒng)下使用pycharm開發(fā)程序,并遠程連接服務器調(diào)試程序,其中在import tensorflow時報錯,本文就來介紹一下如何解決,感興趣的可以了解一下
    2021-06-06
  • python PyQt5事件機制和定時器原理分析及用法詳解

    python PyQt5事件機制和定時器原理分析及用法詳解

    PyQt為事件處理提供了兩種機制:高級的信號與槽機制,以及低級的事件處理機制,在基于PyQt5的應用程序開發(fā)過程中經(jīng)常會遇到一些需要循環(huán)執(zhí)行的任務,即定時多長時間任務循環(huán)一次,本文給大家介紹了python PyQt5事件機制和定時器原理和用法,需要的朋友可以參考下
    2024-07-07
  • Python Scrapy爬蟲框架使用示例淺析

    Python Scrapy爬蟲框架使用示例淺析

    Scrapy爬蟲框架可以實現(xiàn)多線程爬取目標內(nèi)容,簡化代碼邏輯,提高開發(fā)效率,這篇文章主要介紹了Python Scrapy爬蟲框架的使用示例,感興趣想要詳細了解可以參考下文
    2023-05-05
  • opencv檢測動態(tài)物體的實現(xiàn)

    opencv檢測動態(tài)物體的實現(xiàn)

    本文主要介紹了opencv檢測動態(tài)物體的實現(xiàn),文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧
    2021-07-07
  • 使用python下載大型文件顯示進度條和下載時間的操作代碼

    使用python下載大型文件顯示進度條和下載時間的操作代碼

    大家都知道下載大型文件時存在一個問題,那就是內(nèi)存使用量迅速上升,可能會造成電腦卡死,所以我們需要換一個方式進行下載,這篇文章主要介紹了使用python下載大型文件的方法顯示進度條和下載時間,需要的朋友可以參考下
    2022-11-11

最新評論

兴化市| 镇赉县| 文登市| 高安市| 军事| 平泉县| 仁化县| 尤溪县| 尼勒克县| 灵丘县| 综艺| 金昌市| 宜君县| 湖北省| 绍兴市| 黄骅市| 郯城县| 汉源县| 铅山县| 夏河县| 平江县| 灵武市| 舟山市| 天门市| 馆陶县| 朝阳县| 攀枝花市| 奇台县| 洪洞县| 商丘市| 石狮市| 逊克县| 浮山县| 于田县| 尖扎县| 资阳市| 嘉兴市| 三台县| 隆德县| 全南县| 武强县|