婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 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中,它給我們提供了以下方法進行獲取:

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實現輪廓的特征值的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    精品无人码麻豆乱码1区2区 | 国产精品99久久久| 亚洲成人综合网站| 一区二区三区日韩精品视频| 亚洲一区二区三区中文字幕| 午夜久久福利影院| 综合久久久久久久| 综合久久久久久| 亚洲欧美一区二区三区国产精品| 亚洲男人的天堂av| 久久精品国产一区二区三 | 国产剧情一区在线| 国内一区二区在线| 91免费精品国自产拍在线不卡| 国产一区二区免费视频| 99综合影院在线| 欧美电影在哪看比较好| 欧美日韩亚州综合| 久久久久国产一区二区三区四区| 久久久久久久久久美女| 亚洲综合一二区| 麻豆视频一区二区| 在线免费亚洲电影| 国产精品妹子av| 日韩精品视频网| 99久久精品免费看国产免费软件| 555夜色666亚洲国产免| 日韩理论片中文av| 99精品黄色片免费大全| 精品国产乱码久久久久久1区2区| 亚洲人吸女人奶水| 国产成人亚洲精品青草天美| 精品欧美一区二区三区精品久久| 天天综合色天天综合色h| 国产精品一区二区不卡| 中文字幕亚洲综合久久菠萝蜜| 国产在线播放一区| 一本色道久久综合亚洲91| 精品欧美久久久| 亚洲电影第三页| 99re视频精品| 亚洲欧美色一区| 91免费观看国产| 老司机精品视频线观看86| 欧美日韩激情在线| 日本不卡视频在线| 91精品国产乱码久久蜜臀| 蜜臀av一区二区在线观看| 91精品国产综合久久福利软件| 日本色综合中文字幕| 欧美一区二区视频在线观看| 视频一区二区三区中文字幕| 欧美日韩一区二区三区四区五区| 午夜伦欧美伦电影理论片| 色噜噜偷拍精品综合在线| 亚洲国产cao| 欧美久久久影院| 韩日av一区二区| 亚洲天堂精品在线观看| 欧美日本视频在线| 精品一区中文字幕| 亚洲欧美视频在线观看| 欧美变态tickling挠脚心| 欧亚洲嫩模精品一区三区| 丁香婷婷综合色啪| 久久成人免费电影| 轻轻草成人在线| 亚洲一区成人在线| 精品国产91洋老外米糕| 欧美日韩不卡一区二区| 午夜精品久久久久| 综合自拍亚洲综合图不卡区| 久久久久久久精| 国产日韩欧美精品在线| 日韩欧美一区电影| 久久久久久日产精品| 欧美成人艳星乳罩| 久久精品视频一区二区| 五月综合激情网| 国产麻豆91精品| 欧美日韩国产首页在线观看| 久久免费美女视频| 国产午夜亚洲精品理论片色戒 | 香蕉加勒比综合久久| 一区二区三区色| 亚洲精品精品亚洲| 一区二区三区欧美日韩| 亚洲综合激情另类小说区| 视频一区在线播放| 九九国产精品视频| 国产一区二区三区免费在线观看| 国产麻豆精品视频| 久久99九九99精品| 成人午夜视频在线观看| 色婷婷久久一区二区三区麻豆| 欧美高清精品3d| 久久丝袜美腿综合| 亚洲国产中文字幕| 国产精品99久久久久| 欧美视频在线观看一区| 男人的j进女人的j一区| 亚洲一级二级在线| 国产一区三区三区| 美女视频黄 久久| 56国语精品自产拍在线观看| 日韩一区二区三区视频| 狠狠色狠狠色合久久伊人| 久久综合999| 91看片淫黄大片一级在线观看| 国产精品久久看| 麻豆成人在线观看| 欧美成人艳星乳罩| 国产白丝精品91爽爽久久| 亚洲天堂a在线| 91电影在线观看| 99久久99久久精品国产片果冻 | 成人欧美一区二区三区1314| 欧美艳星brazzers| 性做久久久久久久久| 国产精品国产成人国产三级| 99视频在线精品| 狠狠色综合色综合网络| 国产精品成人免费精品自在线观看| 欧美亚洲综合另类| 国产69精品久久久久毛片| 男人操女人的视频在线观看欧美| 中文字幕综合网| 精品国产髙清在线看国产毛片 | 91色乱码一区二区三区| 午夜不卡av免费| 亚洲国产成人va在线观看天堂| 洋洋成人永久网站入口| 国产一区二三区好的| 韩国三级中文字幕hd久久精品| 亚洲v日本v欧美v久久精品| 亚洲国产精品自拍| 偷拍亚洲欧洲综合| 蜜桃视频在线观看一区| 成人av在线一区二区三区| 91丝袜美腿高跟国产极品老师 | 亚洲国产高清在线| 视频一区二区三区在线| 国产欧美日韩视频在线观看| 欧美日韩精品高清| 成人看片黄a免费看在线| 亚洲一区二区三区三| 91国产精品成人| 美洲天堂一区二卡三卡四卡视频 | 国产精品久久久久久户外露出 | 欧美中文字幕一区| 亚洲激情校园春色| 日韩欧美激情四射| 欧美日韩在线播放一区| www.在线成人| 奇米综合一区二区三区精品视频| 亚洲精品免费电影| 欧美xxxxx裸体时装秀| 91黄色小视频| av网站一区二区三区| 成人免费毛片高清视频| 日韩二区三区在线观看| 五月激情六月综合| 91精品婷婷国产综合久久性色| 国产一区二区三区免费| 一本久道久久综合中文字幕| 粉嫩一区二区三区性色av| 韩国v欧美v亚洲v日本v| 日本午夜精品视频在线观看| 亚洲少妇30p| 性感美女极品91精品| 午夜精品久久久久久久| 国产成人在线色| 欧美人伦禁忌dvd放荡欲情| 奇米一区二区三区| 成人精品国产福利| 日本一区二区免费在线 | 成人精品在线视频观看| 欧美一区二区在线播放| 粉嫩欧美一区二区三区高清影视| 亚洲国产成人私人影院tom| 天天色图综合网| www久久久久| 国产综合久久久久影院| 精品盗摄一区二区三区| 色欧美乱欧美15图片| 麻豆专区一区二区三区四区五区| 国产精品家庭影院| 精品久久久久久久人人人人传媒 | 欧美视频一区二区三区在线观看| 一区二区三区电影在线播| 日韩女同互慰一区二区| 91丨九色丨蝌蚪丨老版| 久久婷婷国产综合国色天香| 欧美三级韩国三级日本三斤| 成人黄色av电影| 亚洲人xxxx| 亚洲精品国产一区二区精华液 | 亚洲福利一二三区| 欧美一区二区三区电影| av成人免费在线观看|