日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

OpenCV(25)轮廓检测(轮廓提取、属性、近似轮廓、外接矩形和外接圆)

發布時間:2023/11/27 生活经验 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenCV(25)轮廓检测(轮廓提取、属性、近似轮廓、外接矩形和外接圆) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

目錄

一、輪廓檢測基礎理論

1、輪廓概述

2、API介紹

1、cv.findContours函數(查找輪廓)

2、cv.drawContours函數(畫出輪廓)

檢測輪廓并畫出:(用二值圖檢測輪廓)

二、代碼及效果

三、輪廓檢測的屬性

1、畫出單個輪廓

2、顯示面積和周長

代碼及效果

四、近似輪廓

1、步驟

2、API

3、實現

各精度的近似輪廓:?

五、邊界矩形和外接圓

1、邊界矩形?

2、外接圓

總代碼

參考資料


一、輪廓檢測基礎理論

1、輪廓概述

邊緣和輪廓區別:邊緣是零散的點,輪廓是整體。

在二值圖中找輪廓。

2、API介紹

1、cv.findContours函數(查找輪廓)

contours, hierarchy = cv2.findContours(img,mode,method)

參數:?

?返回:

contours:輪廓

hierarchy:層級

# 1、根據二值圖找到輪廓contours, hierarchy = cv.findContours(binary, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)# 輪廓      層級                               輪廓檢索模式(推薦此)  輪廓逼近方法

2、cv.drawContours函數(畫出輪廓)

# 2、畫出輪廓dst = cv.drawContours(img, contours, -1,                (0, 0, 255), 3)#                           輪廓     第幾個(默認-1:所有)   顏色       線條厚度

檢測輪廓并畫出:(用二值圖檢測輪廓)

# 提取輪廓
def GetGontours():# 1、根據二值圖找到輪廓contours, hierarchy = cv.findContours(binary, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)# 輪廓      層級                               輪廓檢索模式(推薦此)  輪廓逼近方法# 2、畫出輪廓dst = cv.drawContours(img, contours, -1,                (0, 0, 255), 3)#                           輪廓     第幾個(默認-1:所有)   顏色       線條厚度cv.imshow('dst', dst)


二、代碼及效果

# 輪廓提取
import cv2 as cv# 轉二進制圖像
def ToBinray():global imgray, binary# 1、灰度圖imgray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)cv.imshow('imgray', imgray)# 2、二進制圖像ret, binary = cv.threshold(imgray, 127, 255, 0)# 閾值 二進制圖像cv.imshow('binary', binary)# 提取輪廓
def GetGontours():# 1、根據二值圖找到輪廓contours, hierarchy = cv.findContours(binary, cv.RETR_TREE, cv.CHAIN_APPROX_NONE)# 輪廓      層級                               輪廓檢索模式(推薦此)  輪廓逼近方法# 2、畫出輪廓dst = cv.drawContours(img, contours, -1,                (0, 0, 255), 3)#                           輪廓     第幾個(默認-1:所有)   顏色       線條厚度cv.imshow('dst', dst)if __name__ == '__main__':img = cv.imread('Resource/test11.jpg')cv.imshow('img', img)ToBinray()          #轉二進制GetGontours()       #提取輪廓cv.waitKey(0)

三、輪廓檢測的屬性

1、畫出單個輪廓

# 畫出第一個輪廓cnt = contours[0]dst = cv.drawContours(img, cnt, -1, (0, 0, 255), 3)cv.imshow('dst1', dst)

?

2、顯示面積和周長

# 獲取輪廓面積area = cv.contourArea(cnt)print("輪廓面積:", area)# 周長(True表示合并)perimeter = cv.arcLength(cnt, True)print("輪廓周長:", perimeter)

代碼及效果

# 獲取輪廓信息
def GetContours_Attrib():# 畫出第一個輪廓cnt = contours[0]dst = cv.drawContours(img, cnt, -1, (0, 0, 255), 3)cv.imshow('dst1', dst)# 獲取輪廓面積area = cv.contourArea(cnt)print("輪廓面積:", area)# 周長(True表示合并)perimeter = cv.arcLength(cnt, True)print("輪廓周長:", perimeter)

四、近似輪廓

1、步驟

1、獲取輪廓外圍

2、設置精度(從輪廓到近似輪廓的最大距離)

3、獲取近似輪廓

4、繪制輪廓

2、API

# 2、設置精度(從輪廓到近似輪廓的最大距離)epsilon = 0.03 * cv.arcLength(cnt, True)#                            輪廓  閉合輪廓還是曲線
# 3、獲取近似輪廓approx = cv.approxPolyDP(cnt, epsilon,          True)#                             近似度(這里為10%)   閉合輪廓還是曲線

3、實現

# 輪廓近似
def GetApprox():# 1、取外圍輪廓cnt = contours[0]# 2、設置精度(從輪廓到近似輪廓的最大距離)epsilon = 0.05 * cv.arcLength(cnt, True)#                            輪廓  閉合輪廓還是曲線# 3、獲取近似輪廓approx = cv.approxPolyDP(cnt, epsilon,          True)#                             近似度(這里為5%)   閉合輪廓還是曲線# 4、繪制輪廓draw_img = img.copy()res = cv.drawContours(draw_img, [approx], -1, (0, 0, 255), 3)# 顯示cv.imshow("res", res)

各精度的近似輪廓:?

精度epsilon=0.01時的近似輪廓:?

精度epsilon=0.02時的近似輪廓:

精度epsilon=0.03時的近似輪廓:

精度epsilon=0.04時的近似輪廓:

?精度epsilon=0.05時的近似輪廓:

五、邊界矩形和外接圓

邊界矩形:根據坐標長寬繪制矩形。

外接圓:根據圓心坐標半徑繪制圓。

1、邊界矩形?

# 獲取邊界矩形
def BoundingRect():# 1、取外圍輪廓cnt = contours[0]# 2、獲取正方形坐標長寬x, y, w, h = cv.boundingRect(cnt)# 3、畫出矩形dst = img.copy()dst = cv.rectangle(dst, (x,y),(x+w,y+h), (0,0,255), 3)# 顯示cv.imshow("dst", dst)

2、外接圓

# 獲取外接圓
def Circle():# 1、獲取第一個輪廓cnt = contours[0]# 2、獲取外接圓(x, y), radius = cv.minEnclosingCircle(cnt)# 坐標   半徑# 3、畫圓dst = img.copy()dst = cv.circle(dst, (int(x), int(y)), int(radius), (0, 0, 255), 3)# 顯示cv.imshow("dst", dst)

總代碼

# 輪廓提取、屬性、近似輪廓、邊界矩形和外接圓
import cv2 as cv# 轉二進制圖像
def ToBinray():global imgray, binary# 1、灰度圖imgray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)cv.imshow('imgray', imgray)# 2、二進制圖像ret, binary = cv.threshold(imgray, 127, 255, 0)# 閾值 二進制圖像cv.imshow('binary', binary)# 提取輪廓
def GetContours():global contours# 1、根據二值圖找到輪廓contours, hierarchy = cv.findContours(binary, cv.RETR_TREE, cv.CHAIN_APPROX_NONE)# 輪廓      層級                               輪廓檢索模式(推薦此)  輪廓逼近方法# 2、畫出輪廓dst = img.copy()dst = cv.drawContours(dst, contours, -1,                (0, 0, 255), 3)#                           輪廓     第幾個(默認-1:所有)   顏色       線條厚度cv.imshow('contours', dst)# 獲取輪廓信息
def GetContours_Attrib():# 畫出第一個輪廓cnt = contours[0]dst = img.copy()dst = cv.drawContours(dst, cnt, -1, (0, 0, 255), 3)cv.imshow('contour0', dst)# 獲取輪廓面積area = cv.contourArea(cnt)print("輪廓面積:", area)# 周長(True表示合并)perimeter = cv.arcLength(cnt, True)print("輪廓周長:", perimeter)# 輪廓近似
def GetApprox():# 1、取外圍輪廓cnt = contours[0]# 2、設置精度(從輪廓到近似輪廓的最大距離)epsilon = 0.01 * cv.arcLength(cnt, True)#                            輪廓  閉合輪廓還是曲線# 3、獲取近似輪廓approx = cv.approxPolyDP(cnt, epsilon,          True)#                             近似度(這里為5%)   閉合輪廓還是曲線# 4、繪制輪廓dst = img.copy()dst = cv.drawContours(dst, [approx], -1, (0, 0, 255), 3)# 顯示cv.imshow("apporx", dst)# 獲取邊界矩形
def BoundingRect():# 1、取外圍輪廓cnt = contours[0]# 2、獲取正方形坐標長寬x, y, w, h = cv.boundingRect(cnt)# 3、畫出矩形dst = img.copy()dst = cv.rectangle(dst, (x,y),(x+w,y+h), (0,0,255), 3)# 顯示cv.imshow("rect", dst)# 獲取外接圓
def Circle():# 1、獲取第一個輪廓cnt = contours[0]# 2、獲取外接圓(x, y), radius = cv.minEnclosingCircle(cnt)# 坐標   半徑# 3、畫圓dst = img.copy()dst = cv.circle(dst, (int(x), int(y)), int(radius), (0, 0, 255), 3)# 顯示cv.imshow("circle", dst)if __name__ == '__main__':img = cv.imread('Resource/contour.jpg')cv.imshow('img', img)ToBinray()              #轉二進制GetContours()           #提取輪廓GetContours_Attrib()    #獲取輪廓信息GetApprox()             #輪廓近似BoundingRect()          #邊界矩形Circle()                #外接圓cv.waitKey(0)

參考資料

https://www.bilibili.com/video/BV1PV411774y?p=25

http://woshicver.com/FifthSection/4_9_2_%E8%BD%AE%E5%BB%93%E7%89%B9%E5%BE%81/

總結

以上是生活随笔為你收集整理的OpenCV(25)轮廓检测(轮廓提取、属性、近似轮廓、外接矩形和外接圆)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。