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

OpenCV半小時掌握基本操作之圖像輪廓

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

【OpenCV】⚠️高手勿入! 半小時學會基本操作 ⚠️ 圖像輪廓

概述

OpenCV 是一個跨平臺的計算機視覺庫, 支持多語言, 功能強大. 今天小白就帶大家一起攜手走進 OpenCV 的世界.

在這里插入圖片描述

圖像輪廓

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

格式:

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

參數:

image: 需要查找輪廓的圖片

mode: 模式

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

method: 輪廓逼近的方法

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

返回值:

  • contours:輪廓本身
  • hierarchy: 輪廓的對應編號

原圖:

在這里插入圖片描述

繪制輪廓

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

格式:

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

參數:

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

在這里插入圖片描述

繪制所有輪廓:

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

# 轉換成灰度圖
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()

輸出結果:

在這里插入圖片描述

繪制單個輪廓:

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

# 轉換成灰度圖
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()

輸出結果:

在這里插入圖片描述

輪廓特征

# 獲取輪廓
cnt = contours[0]  # 取第一個輪廓

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

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

輸出結果:

輪廓面積: 8500.5
輪廓周長: 437.9482651948929

輪廓近似

原圖:

在這里插入圖片描述

代碼:

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

# 轉換成灰度圖
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()

輸出結果:

直接繪制輪廓:

在這里插入圖片描述

輪廓近似:

在這里插入圖片描述

邊界矩形

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

例子:

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

# 轉換成灰度圖
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)

# 獲取第一個輪廓
cnt = contours[0]

# 獲取正方形坐標長寬
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)

輸出結果:

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

在這里插入圖片描述

外接圓

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

例子:

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

# 轉換成灰度圖
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)

# 獲取第一個輪廓
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()

輸出結果:

在這里插入圖片描述

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

相關文章

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

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

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

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

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

    Python首次安裝后運行報錯(0xc000007b)的解決方法

    最近在安裝完Python后運行發(fā)現(xiàn)居然報錯了,錯誤代碼是0xc000007b,于是通過往上查找發(fā)現(xiàn)是因為首次安裝Python缺乏VC++庫的原因,下面通過這篇文章看看如何解決這個問題吧。
    2016-10-10
  • Python XML RPC服務器端和客戶端實例

    Python XML RPC服務器端和客戶端實例

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

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

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

    opencv 閾值分割的具體使用

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

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

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

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

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

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

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

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

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

最新評論

莱芜市| 夏津县| 淳化县| 鸡东县| 永济市| 琼中| 泰顺县| 大宁县| 麻城市| 大竹县| 舞阳县| 安吉县| 赤峰市| 清徐县| 长丰县| 黑水县| 苏州市| 邓州市| 清苑县| 宁强县| 上杭县| 塔河县| 达孜县| 五寨县| 分宜县| 深州市| 宁乡县| 大城县| 锡林浩特市| 东安县| 河源市| 丹凤县| 本溪| 广宗县| 湖南省| 鄂尔多斯市| 万盛区| 广昌县| 临武县| 文昌市| 乳山市|