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

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ī)視覺(jué)庫(kù), 支持多語(yǔ)言, 功能強(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)文章

  • Python條件語(yǔ)句與循環(huán)語(yǔ)句

    Python條件語(yǔ)句與循環(huán)語(yǔ)句

    這篇文章主要介紹了Python條件語(yǔ)句與循環(huán)語(yǔ)句,條件語(yǔ)句就是通過(guò)指定的表達(dá)式的運(yùn)行結(jié)果來(lái)判斷當(dāng)前是執(zhí)行還是跳過(guò)某些指定的語(yǔ)句塊,循環(huán)語(yǔ)句就是對(duì)某些語(yǔ)句的重復(fù)執(zhí)行,這個(gè)重復(fù)執(zhí)行是通過(guò)指定表達(dá)式來(lái)控制的,下面來(lái)看具體內(nèi)容及續(xù)航管案例吧,需要的朋友可以參考一下
    2021-11-11
  • Django中多種重定向方法使用詳解

    Django中多種重定向方法使用詳解

    這篇文章主要介紹了Django中多種重定向方法使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Python首次安裝后運(yùn)行報(bào)錯(cuò)(0xc000007b)的解決方法

    Python首次安裝后運(yùn)行報(bào)錯(cuò)(0xc000007b)的解決方法

    最近在安裝完P(guān)ython后運(yùn)行發(fā)現(xiàn)居然報(bào)錯(cuò)了,錯(cuò)誤代碼是0xc000007b,于是通過(guò)往上查找發(fā)現(xiàn)是因?yàn)槭状伟惭bPython缺乏VC++庫(kù)的原因,下面通過(guò)這篇文章看看如何解決這個(gè)問(wèn)題吧。
    2016-10-10
  • Python XML RPC服務(wù)器端和客戶端實(shí)例

    Python XML RPC服務(wù)器端和客戶端實(shí)例

    這篇文章主要介紹了Python XML RPC服務(wù)器端和客戶端實(shí)例,本文給出了實(shí)現(xiàn)代碼以及運(yùn)行效果,需要的朋友可以參考下
    2014-11-11
  • python循環(huán)之彩色圓環(huán)實(shí)現(xiàn)示例

    python循環(huán)之彩色圓環(huán)實(shí)現(xiàn)示例

    這篇文章主要為大家介紹了python循環(huán)之彩色圓環(huán)實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • opencv 閾值分割的具體使用

    opencv 閾值分割的具體使用

    這篇文章主要介紹了opencv 閾值分割的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • python使用Flask操作mysql實(shí)現(xiàn)登錄功能

    python使用Flask操作mysql實(shí)現(xiàn)登錄功能

    這篇文章主要介紹了python使用Flask操作mysql實(shí)現(xiàn)登錄功能,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-05-05
  • Python中subprocess.run()執(zhí)行命令、檢查狀態(tài)與結(jié)果處理深入理解

    Python中subprocess.run()執(zhí)行命令、檢查狀態(tài)與結(jié)果處理深入理解

    這篇文章主要介紹了Python中subprocess.run()執(zhí)行命令、檢查狀態(tài)與結(jié)果處理的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2025-04-04
  • python 類(lèi)的繼承 實(shí)例方法.靜態(tài)方法.類(lèi)方法的代碼解析

    python 類(lèi)的繼承 實(shí)例方法.靜態(tài)方法.類(lèi)方法的代碼解析

    這篇文章主要介紹了python 類(lèi)的繼承 實(shí)例方法.靜態(tài)方法.類(lèi)方法的代碼解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • python 實(shí)現(xiàn)docx與doc文件的互相轉(zhuǎn)換

    python 實(shí)現(xiàn)docx與doc文件的互相轉(zhuǎn)換

    這篇文章主要介紹了python 實(shí)現(xiàn)docx與doc文件的互相轉(zhuǎn)換操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03

最新評(píng)論

酉阳| 朔州市| 新巴尔虎右旗| 九台市| 镇坪县| 横山县| 元江| 静宁县| 阿克苏市| 龙江县| 兴和县| 五寨县| 彩票| 洪江市| 房产| 彭州市| 襄樊市| 利津县| 安西县| 循化| 昌乐县| 阿鲁科尔沁旗| 罗源县| 孟连| 武夷山市| 油尖旺区| 兴化市| 贵州省| 荃湾区| 双城市| 屏南县| 文登市| 桑日县| 南城县| 天柱县| 会宁县| 天水市| 衡水市| 阜宁县| 建昌县| 交口县|