欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何利用Python+OpenCV實(shí)現(xiàn)簡(jiǎn)易圖像邊緣輪廓檢測(cè)(零基礎(chǔ))

 更新時(shí)間:2022年05月12日 09:09:25   作者:曹栩珩  
輪廓是形狀分析和物體檢測(cè)和識(shí)別的有用工具,下面這篇文章主要給大家介紹了關(guān)于如何利用Python+OpenCV實(shí)現(xiàn)簡(jiǎn)易圖像邊緣輪廓檢測(cè)(零基礎(chǔ))的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

圖像的輪廓檢測(cè)不論是機(jī)器視覺(jué)還是其他方面都有較大作用,本文將基與Python3.7和OpenCV4.3對(duì)靜態(tài)圖像進(jìn)行輪廓檢測(cè)。最終以方框的形式框出目標(biāo)圖像。

函數(shù)基礎(chǔ)與三方庫(kù)

本文所用的第三方庫(kù)是Opencv4.3

導(dǎo)入第三方庫(kù)

import cv2 as cv

由于Opencv顯示圖像比較麻煩,與matlab或matplob不一致,考慮到基礎(chǔ)薄弱可能對(duì)此庫(kù)的圖像顯示機(jī)制不了解,在此我先定義一個(gè)img_show函數(shù),目的是更方便的顯示圖像。

def img_show(pic,name):
'''
此函數(shù)img_show()用于調(diào)用OpenCV的相關(guān)函數(shù)來(lái)進(jìn)行圖像展示
name為顯示圖像窗口的名稱(name為字符串)
pic為被顯示圖像(pic為opencv imread進(jìn)來(lái)的圖片)
'''
    cv.imshow(pic,name)
    cv.waitkey(0)
    cv.destroyAllWindows()

cv.threshold(pic,thresh,maxvalue,model)

此函數(shù)用于圖像單通道不同閾值的操作,一般用來(lái)將圖像進(jìn)行二值化處理,二值化處理將有助于邊緣檢測(cè)的梯度計(jì)算。
其中pic為待處理圖片,由于是對(duì)單通道處理,所以pic一般要轉(zhuǎn)換為灰度圖

thresh為操作閾值,高于這個(gè)閾值的將根據(jù)不同的model統(tǒng)一成 0 或 maxvalue

model為操作方法,一般只需要cv.THRESH_BINARY_INV和cv.THRESH_BINARY

…THRESH_BINARY_INV 將大于thresh的設(shè)置為0

…THRESH_BINARY 將大于thresh的設(shè)置為255

該圖像有兩個(gè)返回值,第一個(gè)返回值為閾值,即thresh值,第二個(gè)為二值圖像的矩陣

cv.findContours(待處理圖片,model(提取模式),method(提取方法))

此函數(shù)用于提取pic的輪廓點(diǎn),pic為二值圖像時(shí),函數(shù)提取將更加精準(zhǔn)

model 為提取模式 一般用到cv.RETR_EXTERNAL和cv.RETR_TREE

…Extrnal為以外層輪廓的方式進(jìn)行提取

…Tree則提取圖像內(nèi)外層所有輪廓

method 為提取方法,有cv.CHAIN_APPROX_NONE和cv.CHAIN_APPROX_SIMPLE

…NONE為以線的方式連接提取出來(lái)的輪廓

…SIMPLE則壓縮了線和斜邊,只標(biāo)記了輪廓的各個(gè)頂點(diǎn)

此函數(shù)的返回值有兩個(gè),一個(gè)是邊緣點(diǎn)(列表形式),一個(gè)是層次信息

contours,hierarchy = cv.findContours(pic,cv.RETR_EXTERNAL,cv.CHAIN_APPROX_NONE)

此段代碼的意思是

基于pic 此圖像

使用描述外輪廓的模式

通過(guò)各個(gè)點(diǎn)鏈接的方式進(jìn)行輪廓提取

最終得到輪廓列表集合contours和層次關(guān)系hierarchy

注:在contours里面有非常多的輪廓集合,比如contours[0]\contours[1]\contours[2]是三個(gè)輪廓,可能只有1是目標(biāo)輪廓,其他均為噪聲輪廓

cv.drawContours(畫(huà)布,輪廓集合,索引,顏色,粗細(xì))

此函數(shù)用于在指定畫(huà)布,用指定顏色粗細(xì)的線畫(huà)出指定輪廓(索引判斷)或所有輪廓(-1)

畫(huà)布:將輪廓點(diǎn)畫(huà)在畫(huà)布上,一般是代替去圖片的copy圖,不然會(huì)污染原圖。

輪廓集合:上文中提到的contours,其中包含了目標(biāo)輪廓和噪聲輪廓的所有輪廓

索引:選定輪廓集合中的某一輪廓,如果你知道目標(biāo)輪廓的編號(hào)可以直接寫(xiě),如果不知道就寫(xiě)-1,可以畫(huà)出所有輪廓

顏色: 元組形式,(255,0,0)為紅色,以此類推

粗細(xì):輪廓的粗細(xì) 1~任意整數(shù),太大會(huì)覆蓋原圖

cv.boundingRect(圖像)

此函數(shù)用于將檢測(cè)的函數(shù)進(jìn)行矩陣點(diǎn)的查找

圖像:被檢測(cè)的圖像,一般是傳入目標(biāo)的輪廓,即contours[index],index為目標(biāo)編號(hào)

此函數(shù)會(huì)返回四個(gè)值:x,y,w,h

其中x,y指的是該圖像x軸上最小值和y軸最小值(有左上角為原點(diǎn)時(shí)),w,h跟別指的囊括圖像所有的寬和高

代碼實(shí)現(xiàn)

#導(dǎo)入opencv
import cv2 as cv

#定義opencv的圖像顯示函數(shù)
def img_show(pic,name):
    cv.imshow(pic,name)
    cv.waitKey(0)
    cv.destroyAllWindows()

#彩色模式讀入圖片
eagle_o = cv.imread('eagle.png',1)
# 圖片轉(zhuǎn)為灰度圖
eagle = cv.cvtColor(eagle_o,cv.COLOR_BGR2GRAY)
# 將圖像轉(zhuǎn)換為二值圖
ret,eagle_2v = cv.threshold(eagle,125,255,cv.THRESH_BINARY_INV) #ret為閾值,eagl_2v為二值圖
# 基于二值圖像用外輪廓的模式,通過(guò)全點(diǎn)連接輪廓的方法提取輪廓
contours,hierarchy = cv.findContours(eagle_2v,cv.RETR_EXTERNAL,cv.CHAIN_APPROX_NONE)
# 在copy圖上畫(huà)出所有輪廓
img = cv.drawContours(eagle_o.copy(),contours,-1,(255,25,0),5)
# 獲取目標(biāo)圖像的最小矩陣,此處29為目標(biāo)的輪廓
x,y,w,h = cv.boundingRect(contours[29])
# 繪制目標(biāo)框
img = cv.rectangle(eagle_o,(x,y),(x+w,y+h),(255,255,0),7)
img_show('goal',img)

實(shí)現(xiàn)效果

總結(jié)

到此這篇關(guān)于如何利用Python+OpenCV實(shí)現(xiàn)簡(jiǎn)易圖像邊緣輪廓檢測(cè)的文章就介紹到這了,更多相關(guān)Python OpenCV圖像邊緣輪廓檢測(cè)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • win10系統(tǒng)配置GPU版本Pytorch的詳細(xì)教程

    win10系統(tǒng)配置GPU版本Pytorch的詳細(xì)教程

    這篇文章主要介紹了win10系統(tǒng)配置GPU版本Pytorch,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • 基于Python代碼編輯器的選用(詳解)

    基于Python代碼編輯器的選用(詳解)

    下面小編就為大家?guī)?lái)一篇基于Python代碼編輯器的選用(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • Python利用matplotlib繪制圓環(huán)圖(環(huán)形圖)的實(shí)戰(zhàn)案例

    Python利用matplotlib繪制圓環(huán)圖(環(huán)形圖)的實(shí)戰(zhàn)案例

    環(huán)形圖也被稱為圓環(huán)圖,它在功能上與餅圖相同,只是中間有一個(gè)空白,并且能夠同時(shí)支持多個(gè)統(tǒng)計(jì)數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于Python利用matplotlib繪制圓環(huán)圖的實(shí)戰(zhàn)案例,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • python if not in 多條件判斷代碼

    python if not in 多條件判斷代碼

    學(xué)了一段時(shí)間python,發(fā)現(xiàn)有時(shí)遇到多條件判斷的時(shí)候,覺(jué)得使用單純的in的話比較麻煩,需要多個(gè)條件,今天又遇到一個(gè),網(wǎng)上搜索了一下,也有同學(xué)和我遇到相同的問(wèn)題,記錄一下
    2016-09-09
  • python中的turtle庫(kù)函數(shù)簡(jiǎn)單使用教程

    python中的turtle庫(kù)函數(shù)簡(jiǎn)單使用教程

    這篇文章主要介紹了python中的turtle庫(kù)函數(shù)簡(jiǎn)單使用教程。本文通過(guò)圖片的形式給大家展示的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2018-07-07
  • 在pycharm中輸入import torch報(bào)錯(cuò)如何解決

    在pycharm中輸入import torch報(bào)錯(cuò)如何解決

    這篇文章主要介紹了在pycharm中輸入import torch報(bào)錯(cuò)如何解決問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • nlp計(jì)數(shù)法應(yīng)用于PTB數(shù)據(jù)集示例詳解

    nlp計(jì)數(shù)法應(yīng)用于PTB數(shù)據(jù)集示例詳解

    這篇文章主要為大家介紹了nlp計(jì)數(shù)法應(yīng)用于PTB數(shù)據(jù)集示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • Python設(shè)計(jì)模式之單例模式實(shí)例

    Python設(shè)計(jì)模式之單例模式實(shí)例

    這篇文章主要介紹了設(shè)計(jì)模式中的單例模式Python實(shí)例,需要的朋友可以參考下
    2014-04-04
  • python3實(shí)現(xiàn)爬取淘寶美食代碼分享

    python3實(shí)現(xiàn)爬取淘寶美食代碼分享

    本文給大家分享的是如何使用python3來(lái)爬取淘寶美食圖片標(biāo)題等信息的方法和代碼,有需要的小伙伴可以參考下
    2018-09-09
  • Python模塊MarkupPy與自定義html報(bào)告詳解

    Python模塊MarkupPy與自定義html報(bào)告詳解

    MarkupPy是Python模塊用于生成HTML和XML格式的字符串,它的主要作用是提供了一種比原生HTML/XML更加易讀和易寫(xiě)的編寫(xiě)方式,通過(guò)Python代碼來(lái)生成HTML或XML代碼,這篇文章主要介紹了Python模塊MarkupPy&自定義html報(bào)告的相關(guān)知識(shí),需要的朋友可以參考下
    2023-07-07

最新評(píng)論