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

OpenCV半小時(shí)掌握基本操作之圖像輪廓

 更新時(shí)間:2021年09月01日 14:52:08   作者:我是小白呀  
這篇文章主要介紹了OpenCV基本操作之圖像輪廓,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

【OpenCV】⚠️高手勿入! 半小時(shí)學(xué)會(huì)基本操作 ⚠️ 圖像輪廓

概述

OpenCV 是一個(gè)跨平臺(tái)的計(jì)算機(jī)視覺庫(kù), 支持多語言, 功能強(qiáng)大. 今天小白就帶大家一起攜手走進(jìn) OpenCV 的世界.

在這里插入圖片描述

圖像輪廓

cv2.findContours可以幫助我們查找輪廓.

格式:

cv2.findContours(image, mode, method, contours=None, hierarchy=None, offset=None)

參數(shù):

image: 需要查找輪廓的圖片

mode: 模式

  • RETR_EXTERNAL: 只檢測(cè)最外面的輪廓
  • RETR_LIST: 檢測(cè)所有的輪廓, 并將其保存到一條鏈表中
  • RETR_CCOMP: 檢索所有的輪廓, 將他們組織為兩層: 頂部是各分部法外部邊界, 第二層是空洞的邊界
  • RRTR_TREE: 檢索所有的輪廓, 并重構(gòu)嵌套輪廓的整個(gè)層次

method: 輪廓逼近的方法

  • CHAIN_APPROX_NONE: 以 Freeman 鏈碼的方式輸出輪廓, 所有其他方法輸出多邊形 (定點(diǎn)的序列)
  • CHAIN_APPROX_SIMPLE: 壓縮水平的, 垂直的和斜的部分, 只保留他們的終點(diǎn)部分

返回值:

  • contours:輪廓本身
  • hierarchy: 輪廓的對(duì)應(yīng)編號(hào)

原圖:

在這里插入圖片描述

繪制輪廓

cv2.drawContours可以實(shí)現(xiàn)輪廓繪制.

格式:

cv2.drawContours(image, contours, contourIdx, color, thickness=None, lineType=None, hierarchy=None, maxLevel=None, offset=None): 

參數(shù):

  • image: 需要繪制輪廓的圖片
  • contours: 輪廓
  • color: 顏色
  • thickness: 輪廓粗細(xì)

在這里插入圖片描述

繪制所有輪廓:

# 讀取圖片
img = cv2.imread("contours.jpg")

# 轉(zhuǎn)換成灰度圖
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 二值化
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

# 獲取輪廓 (所有)
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)

# 繪制輪廓
draw_img = img.copy()
res = cv2.drawContours(draw_img, contours, -1, (0, 0, 255), 2)

# 圖片展示
cv2.imshow("res", res)
cv2.waitKey(0)
cv2.destroyAllWindows()

輸出結(jié)果:

在這里插入圖片描述

繪制單個(gè)輪廓:

# 讀取圖片
img = cv2.imread("contours.jpg")

# 轉(zhuǎn)換成灰度圖
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 二值化
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

# 獲取輪廓
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)

# 繪制輪廓 (單一)
draw_img = img.copy()
res = cv2.drawContours(draw_img, contours, 0, (0, 0, 255), 2)

# 圖片展示
cv2.imshow("res", res)
cv2.waitKey(0)
cv2.destroyAllWindows()

輸出結(jié)果:

在這里插入圖片描述

輪廓特征

# 獲取輪廓
cnt = contours[0]  # 取第一個(gè)輪廓

# 面積
area = cv2.contourArea(cnt)
print("輪廓面積:", area)

# 周長(zhǎng), True表示合并
perimeter = cv2.arcLength(cnt, True)
print("輪廓周長(zhǎng):", perimeter)

輸出結(jié)果:

輪廓面積: 8500.5
輪廓周長(zhǎng): 437.9482651948929

輪廓近似

原圖:

在這里插入圖片描述

代碼:

# 讀取圖片
img = cv2.imread("contours2.jpg")

# 轉(zhuǎn)換成灰度圖
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 二值化
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

# 獲取輪廓
contours, hieratchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)

# 繪制輪廓
draw_img = img.copy()
res = cv2.drawContours(draw_img, contours, 0, (0, 0, 255), 2)

# 圖片展示
cv2.imshow("res", res)
cv2.waitKey(0)
cv2.destroyAllWindows()

# 取外圍輪廓
cnt = contours[0]

# 輪廓近似
epsilon = 0.1 * cv2.arcLength(cnt, True)
approx = cv2.approxPolyDP(cnt, epsilon, True)

# 繪制輪廓
draw_img = img.copy()
res = cv2.drawContours(draw_img, [approx], -1, (0, 0, 255), 2)

# 圖片展示
cv2.imshow("res", res)
cv2.waitKey(0)
cv2.destroyAllWindows()

輸出結(jié)果:

直接繪制輪廓:

在這里插入圖片描述

輪廓近似:

在這里插入圖片描述

邊界矩形

cv2.boundingRect可以幫助我們得到邊界矩形的位置和長(zhǎng)寬.

例子:

# 讀取圖片
img = cv2.imread("contours.jpg")

# 轉(zhuǎn)換成灰度圖
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 二值化
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

# 獲取輪廓
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)

# 獲取第一個(gè)輪廓
cnt = contours[0]

# 獲取正方形坐標(biāo)長(zhǎng)寬
x, y, w, h = cv2.boundingRect(cnt)

# 圖片展示
img = cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
cv2.imshow("img", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

# 輪廓面積
area = cv2.contourArea(cnt)

# 邊界矩形面積
rect_area = w * h

# 占比
extent = area / rect_area
print('輪廓面積與邊界矩形比:', extent)

輸出結(jié)果:

輪廓面積與邊界矩形比: 0.5154317244724715

在這里插入圖片描述

外接圓

cv2.minEnclosingCircle可以幫助我們得到外接圓的位置和半徑.

例子:

# 讀取圖片
img = cv2.imread("contours.jpg")

# 轉(zhuǎn)換成灰度圖
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 二值化
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

# 獲取輪廓
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)

# 獲取第一個(gè)輪廓
cnt = contours[0]

# 獲取外接圓
(x, y), radius = cv2.minEnclosingCircle(cnt)

# 獲取圖片
img = cv2.circle(img, (int(x), int(y)), int(radius), (255, 100, 0), 2)

# 圖片展示
cv2.imshow("img", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

輸出結(jié)果:

在這里插入圖片描述

到此這篇關(guān)于OpenCV半小時(shí)掌握基本操作之圖像輪廓的文章就介紹到這了,更多相關(guān)OpenCV圖像輪廓內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決python3 網(wǎng)絡(luò)請(qǐng)求路徑包含中文的問題

    解決python3 網(wǎng)絡(luò)請(qǐng)求路徑包含中文的問題

    今天小編就為大家分享一篇解決python3 網(wǎng)絡(luò)請(qǐng)求路徑包含中文的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • python實(shí)現(xiàn)新年倒計(jì)時(shí)實(shí)例代碼

    python實(shí)現(xiàn)新年倒計(jì)時(shí)實(shí)例代碼

    大家好,本篇文章主要講的是python實(shí)現(xiàn)新年倒計(jì)時(shí)實(shí)例代碼,昂星期的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • 從局部變量和全局變量開始全面解析Python中變量的作用域

    從局部變量和全局變量開始全面解析Python中變量的作用域

    無論是以類為基礎(chǔ)的面相對(duì)象編程,還是單純函數(shù)內(nèi)部變量的定義,變量的作用域始終是Python學(xué)習(xí)中一個(gè)必須理解掌握的環(huán)節(jié),下面我們從局部變量和全局變量開始全面解析Python中變量的作用域,需要的朋友可以參考下
    2016-06-06
  • python中l(wèi)ist列表的高級(jí)函數(shù)

    python中l(wèi)ist列表的高級(jí)函數(shù)

    這篇文章主要為大家詳細(xì)介紹了python中l(wèi)ist列表的高級(jí)函數(shù),感興趣的小伙伴們可以參考一下
    2016-05-05
  • 手把手教你pycharm專業(yè)版安裝破解教程(linux版)

    手把手教你pycharm專業(yè)版安裝破解教程(linux版)

    這篇文章主要介紹了 手把手教你pycharm專業(yè)版安裝破解教程(linux版),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Python使用pyinstaller打包含有g(shù)ettext?locales語言環(huán)境的項(xiàng)目(推薦)

    Python使用pyinstaller打包含有g(shù)ettext?locales語言環(huán)境的項(xiàng)目(推薦)

    最近在用 pyhton 做一個(gè)圖片處理的小工具,順便接觸了gettext,用來實(shí)現(xiàn)本地化化中英文轉(zhuǎn)換,本文通過一個(gè)項(xiàng)目給大家詳細(xì)介紹下,感興趣的朋友跟隨小編一起看看吧
    2022-01-01
  • python深copy和淺copy區(qū)別對(duì)比解析

    python深copy和淺copy區(qū)別對(duì)比解析

    這篇文章主要介紹了python深copy和淺copy區(qū)別對(duì)比解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Python迅速掌握語音識(shí)別之知識(shí)儲(chǔ)備篇

    Python迅速掌握語音識(shí)別之知識(shí)儲(chǔ)備篇

    語音識(shí)別是一門交叉學(xué)科。近二十年來,語音識(shí)別技術(shù)取得顯著進(jìn)步,開始從實(shí)驗(yàn)室走向市場(chǎng)。人們預(yù)計(jì),未來10年內(nèi),語音識(shí)別技術(shù)將進(jìn)入工業(yè)、家電、通信、汽車電子、醫(yī)療、家庭服務(wù)、消費(fèi)電子產(chǎn)品等各個(gè)領(lǐng)域
    2021-11-11
  • Python時(shí)間操作之pytz模塊使用詳解

    Python時(shí)間操作之pytz模塊使用詳解

    在學(xué)習(xí)Python過程中,我們已經(jīng)了解了一些關(guān)于時(shí)間操作的庫(kù),如:Python內(nèi)置庫(kù):time,datatime和第三方庫(kù):dateutil,pytz等。本文將詳細(xì)講講pytz模塊的使用,需要的可以參考一下
    2022-06-06
  • Python中格式化字符串的四種實(shí)現(xiàn)

    Python中格式化字符串的四種實(shí)現(xiàn)

    這篇文章主要介紹了Python中格式化字符串的四種實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05

最新評(píng)論