校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > OpenCV-Python實現輪廓的特征值

OpenCV-Python實現輪廓的特征值

熱門標簽:海外網吧地圖標注注冊 打電話機器人營銷 ai電銷機器人的優勢 聊城語音外呼系統 孝感營銷電話機器人效果怎么樣 騰訊地圖標注沒法顯示 地圖標注自己和別人標注區別 商家地圖標注海報 南陽打電話機器人

前言

輪廓自身的一些屬性特征及輪廓所包圍對象的特征對于描述圖像具有重要意義。本篇博文將介紹幾個輪廓自身的屬性特征及輪廓包圍對象的特征。

寬高比

在輪廓中,我們可以通過寬高比來描述輪廓,例如矩形的輪廓寬高比為:

寬高比=寬度/高度

下面,我們來計算矩形輪廓的寬高比,代碼如下:

import cv2

img = cv2.imread("26_1.jpg")
cv2.imshow("img", img)

# 轉換為灰度圖像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(binary, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)

x, y, w, h = cv2.boundingRect(contours[0])
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 3)
cv2.imshow("img1", img)

aspectRatio=float(w)/h
print(aspectRatio)

cv2.waitKey()
cv2.destroyAllWindows()

運行之后,我們可以得到輪廓的寬高比約為3:

Extend

我們還可以使用輪廓面積與矩形邊界面積之比Extend來描述圖像及其輪廓特征,數學計算公式圖下:

Extend=輪廓面積/矩形邊界面積

下面,我們來計算Extend,代碼如下:

import cv2

img = cv2.imread("26_1.jpg")
cv2.imshow("img", img)

# 轉換為灰度圖像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(binary, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)

x, y, w, h = cv2.boundingRect(contours[0])
rectArea=w*h#矩形邊界面積
cntArea=cv2.contourArea(contours[0])#輪廓面積
extend=float(cntArea)/rectArea
print(extend)

本例中,輪廓面積與矩形邊界面積的比值Extend大約為0.8:

Solidity

我們還可以使用輪廓面積與凸包面積之比Solidity來衡量圖像,輪廓以及凸包的特征。其數學計算公式為:

Slidity=輪廓面積/凸包面積

下面,我們來計算Slidity,代碼如下:

import cv2

img = cv2.imread("26_1.jpg")
cv2.imshow("img", img)

# 轉換為灰度圖像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(binary, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)

x, y, w, h = cv2.boundingRect(contours[0])
cntArea=cv2.contourArea(contours[0])#輪廓面積
hull=cv2.convexHull(contours[0])
hullArea=cv2.contourArea(hull)#凸包面積
solidity=float(cntArea)/hullArea
print(solidity)

運行之后,本例輪廓面積與凸包面積的比值solidity約為1:

等效直徑

在OpenCV中,我們還可以使用等效直徑來衡量輪廓的特征值,該值是與輪廓面積相等的圓形的直徑。其數學計算公式為:


下面,我們來計算與輪廓面積相等的圓形直徑,代碼如下:

import cv2
import numpy as np

img = cv2.imread("26_1.jpg")
cv2.imshow("img", img)

# 轉換為灰度圖像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(binary, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)

x, y, w, h = cv2.boundingRect(contours[0])
cntArea=cv2.contourArea(contours[0])#輪廓面積
equiDiameter=np.sqrt(4*cntArea/np.pi)
print(equiDiameter)
cv2.circle(img,(100,100),int(equiDiameter/2),(0,255,0),3)
cv2.imshow("img1",img)
cv2.waitKey()
cv2.destroyAllWindows()

運行之后,我們得到其等效直徑約為145:

方向

在OpenCV中,函數cv2.fitEllipse()可以用來構建最優擬合橢圓,還可以在返回值內分別返回橢圓的中心點,軸長,旋轉角度信息。使用這種形式,能夠直觀地獲取橢圓的方向等信息。

函數cv2.fitEllipse()返回值為:

(x,y):橢圓的中心點

(MA,ma):橢圓水平方向軸與垂直方向軸的長度

angle:橢圓的旋轉角度

import cv2

img = cv2.imread("26_1.jpg")
cv2.imshow("img", img)

# 轉換為灰度圖像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(binary, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)

ellipsis=cv2.fitEllipse(contours[0])

(x, y), (MA, ma), angle = cv2.fitEllipse(contours[0])

print((x, y), (MA, ma), angle)

cv2.ellipse(img, ellipsis, (0, 255, 0), 2)
cv2.imshow("img1", img)
cv2.waitKey()
cv2.destroyAllWindows()

本來就是橢圓圖,下面擬合后正好也是橢圓:

掩摸和像素點

有時候,我們還像獲取某對象的掩摸圖像及其對應的點。在OpenCV中,它還提供了cv2.findNonZero()函數用于獲取一個圖像內的輪廓點位置,其完整定義如下:

def findNonZero(src, idx=None): 

src:要查找非零元素的圖像

idx:返回值,表示非0元素的索引位置。具體格式為(行號,列號)

下面,我們實測該函數,代碼如下:

import cv2
import numpy as np

img = cv2.imread("26_1.jpg")

cv2.imshow("img", img)

# 轉換為灰度圖像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(binary, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)

mask=np.zeros(gray.shape,np.uint8)
cv2.drawContours(mask,[contours[0]],0,255,2)
pixelpoints=cv2.findNonZero(mask)
print(pixelpoints)

cv2.imshow("img1", mask)
cv2.waitKey()
cv2.destroyAllWindows()

運行之后,我們會得到輪廓點位置:

最大值,最小值以及它們的位置

在OpenCV中,它提供cv2.minMaxLoc()函數獲取指定對象內最大值,最小值以及位置等信息,其完整定義如下:

def minMaxLoc(src, mask=None): 

src:單通道圖像

mask:掩摸,通過使用掩摸圖像,得到掩膜指定區域內的最值信息

該函數返回4個值:最小值,最大值,最小值位置,最大值位置。

下面,我們來獲取這些值,代碼如下:

import cv2
import numpy as np

img = cv2.imread("26_1.jpg")

cv2.imshow("img", img)

# 轉換為灰度圖像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(binary, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)

mask = np.zeros(gray.shape, np.uint8)
cv2.drawContours(mask, [contours[0]], 0, 255, 2)

min, max, min_loc, max_loc = cv2.minMaxLoc(gray, mask)
print(min, max, min_loc, max_loc)

運行之后,控制臺輸出4個值:

平均顏色及平均灰度

在OpenCV中,它給我們提供cv2.mean()函數計算一個對象的平均顏色與平均灰度。其完整定義如下:

def mean(src, mask=None):

參數與上面兩個小節一樣,這里不在贅述。下面,我們來使用這個函數,代碼如下:

import cv2
import numpy as np

img = cv2.imread("26_1.jpg")


cv2.imshow("img", img)

# 轉換為灰度圖像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(binary, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)

mask=np.zeros(gray.shape,np.uint8)
cv2.drawContours(mask,[contours[0]],0,255,2)

mean=cv2.mean(img,mask)

運行之后,輸出4個值:RGB以及A通道的均值:

極點

有時候,我們希望獲取某個對象內的極點,比如最左,最右,最上,最下等。在OpenCV中,它給我們提供了以下方法進行獲?。?/p>

left=tuple(cnt[cnt[:,:,0].argmin()][0])
right=tuple(cnt[cnt[:,:,0].argmax()][0])
top=tuple(cnt[cnt[:,:,1].argmin()][0])
bottom=tuple(cnt[cnt[:,:,1].argmax()][0])

下面,我們來通過這些方法獲取,代碼如下:

import cv2
import numpy as np

img = cv2.imread("26_1.jpg")

cv2.imshow("img", img)

# 轉換為灰度圖像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(binary, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)

mask = np.zeros(img.shape, np.uint8)
cnt = contours[0]
left = tuple(cnt[cnt[:, :, 0].argmin()][0])
right = tuple(cnt[cnt[:, :, 0].argmax()][0])
top = tuple(cnt[cnt[:, :, 1].argmin()][0])
bottom = tuple(cnt[cnt[:, :, 1].argmax()][0])

print(left, right, top, bottom)

font = cv2.FONT_HERSHEY_SIMPLEX

cv2.putText(img, "left", left, font, 1, (0, 255, 0), 2)
cv2.putText(img, "right", right, font, 1, (0, 255, 0), 2)
cv2.putText(img, "top", top, font, 1, (0, 255, 0), 2)
cv2.putText(img, "bottom", bottom, font, 1, (0, 255, 0), 2)

cv2.imshow("result",img)
cv2.waitKey()
cv2.destroyAllWindows()

運行之后,值與效果如下:

到此這篇關于OpenCV-Python實現輪廓的特征值的文章就介紹到這了,更多相關OpenCV 輪廓的特征值內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Python通過OpenCV的findContours獲取輪廓并切割實例
  • Python Opencv實現圖像輪廓識別功能
  • OpenCV-Python實現輪廓檢測實例分析
  • opencv python 圖像輪廓/檢測輪廓/繪制輪廓的方法
  • OpenCV 輪廓檢測的實現方法
  • Opencv提取連通區域輪廓的方法
  • python+opencv輪廓檢測代碼解析
  • Opencv處理圖像之輪廓提取
  • OpenCV實現圖像輪廓檢測以及外接矩形
  • opencv3/C++輪廓的提取與篩選方式
  • Opencv實現輪廓提取功能

標簽:揚州 聊城 六盤水 楊凌 牡丹江 撫州 南寧 迪慶

巨人網絡通訊聲明:本文標題《OpenCV-Python實現輪廓的特征值》,本文關鍵詞  OpenCV-Python,實現,輪廓,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《OpenCV-Python實現輪廓的特征值》相關的同類信息!
  • 本頁收集關于OpenCV-Python實現輪廓的特征值的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    亚州成人在线电影| 欧美极品另类videosde| 2019国产精品| 日本视频免费一区| 欧美一区在线视频| 精品一二线国产| 久久综合九色综合97婷婷| 国产精品99久| 国产精品―色哟哟| 欧美影视一区二区三区| 日本不卡一二三区黄网| 中文字幕精品一区二区精品绿巨人| 成人免费观看视频| 日韩精品视频网站| 国产亚洲成年网址在线观看| 99久久精品久久久久久清纯| 天天综合网天天综合色| 欧美国产日产图区| 欧美日韩成人一区| 久久精品国产99| 亚洲人成网站影音先锋播放| 欧美一级高清片| 99久久精品免费看国产| 久久se这里有精品| 亚洲欧美国产三级| 精品免费一区二区三区| 91福利精品视频| 国产成人av电影在线观看| 亚洲国产日产av| 国产精品亲子乱子伦xxxx裸| 欧美一区二区三区爱爱| 欧美午夜精品一区二区三区| 成人在线视频一区| 久久国产精品99精品国产| 一区二区三区在线播放| 国产精品免费视频网站| 久久久久久久久久久久久久久99 | 亚洲欧美另类在线| 精品久久五月天| 欧美日韩卡一卡二| 欧洲日韩一区二区三区| 91老师国产黑色丝袜在线| 成人三级在线视频| 成人免费精品视频| 成人国产精品免费观看动漫| 国产成人免费视频网站高清观看视频 | 欧美一区二区网站| 欧美日韩一二三| 欧美日本高清视频在线观看| 欧美最猛黑人xxxxx猛交| 一本色道**综合亚洲精品蜜桃冫 | 国产亚洲美州欧州综合国 | 欧美韩日一区二区三区四区| 精品久久国产97色综合| 欧美大胆一级视频| 精品播放一区二区| 亚洲精品在线三区| 久久亚洲综合色一区二区三区| 欧美videossexotv100| 精品国产乱码久久久久久图片 | 2020日本不卡一区二区视频| 国产三级欧美三级| 国产精品美女久久久久av爽李琼 | 韩国女主播一区二区三区| 毛片av一区二区| 国产一区二区三区香蕉| 波多野洁衣一区| 欧美亚洲免费在线一区| 日韩一区二区三区av| 久久伊人中文字幕| 亚洲婷婷综合色高清在线| 亚洲午夜在线电影| 激情综合网激情| 一本一道久久a久久精品| 欧美老年两性高潮| 久久精品亚洲国产奇米99| 亚洲免费在线电影| 蜜桃91丨九色丨蝌蚪91桃色| 国产原创一区二区| 色婷婷综合久久久久中文| 日韩一区二区免费在线观看| 日韩免费高清av| 一区视频在线播放| 免费日韩伦理电影| 91亚洲大成网污www| 欧美日本免费一区二区三区| 国产亚洲一二三区| 亚洲午夜精品网| 国产91精品入口| 欧美日韩国产综合一区二区三区| 精品精品欲导航| 中文字幕一区二区视频| 男人操女人的视频在线观看欧美| 成人一区二区三区视频在线观看| 色哟哟在线观看一区二区三区| 欧美丰满美乳xxx高潮www| 国产蜜臀av在线一区二区三区| 伊人开心综合网| 国产白丝精品91爽爽久久| 欧美日韩精品二区第二页| 中文字幕免费不卡| 久久精品国产一区二区| 99精品视频在线观看免费| 精品日韩一区二区三区免费视频| 亚洲激情六月丁香| 懂色av噜噜一区二区三区av| 欧美精品久久99| 亚洲女子a中天字幕| 国产精品自拍一区| 欧美大度的电影原声| 天天综合日日夜夜精品| 色婷婷精品久久二区二区蜜臀av| 精品国产3级a| 午夜电影久久久| 91老师片黄在线观看| 国产精品久久久99| 国产精品中文有码| 欧美精品一区男女天堂| 久久69国产一区二区蜜臀| 欧美不卡一二三| 老司机午夜精品| 日韩一区二区影院| 日本不卡中文字幕| 91精品国产aⅴ一区二区| 亚洲va天堂va国产va久| 日本丰满少妇一区二区三区| 亚洲男人天堂一区| 91福利视频久久久久| 亚洲国产va精品久久久不卡综合| 在线看不卡av| 亚洲国产精品久久不卡毛片 | 亚洲一区二区视频在线观看| 一区二区三区四区在线免费观看| 国产不卡视频在线观看| 久久久久成人黄色影片| 国产在线不卡一卡二卡三卡四卡| 久久日韩精品一区二区五区| 国产在线一区二区| 欧美激情一区在线| 成人手机在线视频| 亚洲婷婷国产精品电影人久久| 91在线无精精品入口| 亚洲国产综合视频在线观看| 欧美另类videos死尸| 精品一区二区久久| 中文字幕国产一区二区| 色婷婷久久久久swag精品| 爽爽淫人综合网网站| 日韩欧美电影在线| 成人污污视频在线观看| 亚洲精品视频自拍| 日韩欧美一级精品久久| 丁香六月综合激情| 亚洲猫色日本管| 欧美电影一区二区三区| 老司机午夜精品99久久| 国产精品福利电影一区二区三区四区| 在线视频中文字幕一区二区| 日本特黄久久久高潮| 国产色爱av资源综合区| 9191国产精品| 成人动漫一区二区在线| 精品精品国产高清a毛片牛牛| 国产精品69毛片高清亚洲| 18欧美乱大交hd1984| 337p亚洲精品色噜噜狠狠| 激情欧美一区二区| 一区二区三区四区乱视频| 日韩欧美一区在线观看| 成人18精品视频| 日韩综合小视频| 最新国产精品久久精品| 91精品久久久久久久久99蜜臂| 国产电影精品久久禁18| 亚洲成在线观看| 久久久久成人黄色影片| 69久久夜色精品国产69蝌蚪网| 高清国产一区二区| 日韩1区2区日韩1区2区| 亚洲欧美日韩中文字幕一区二区三区| 4438x成人网最大色成网站| www.欧美色图| 极品美女销魂一区二区三区免费| 一区二区三区高清不卡| 国产天堂亚洲国产碰碰| 91精品免费观看| 欧美日韩一区二区三区在线| thepron国产精品| 国产精品一区在线| 久久国产麻豆精品| 亚洲国产视频一区| 亚洲免费观看高清| 最新日韩在线视频| 久久久美女毛片| 欧美大胆人体bbbb| 精品免费视频.| 精品剧情在线观看| 精品国产亚洲在线| 日韩欧美国产系列| 日韩情涩欧美日韩视频|