好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > 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實現輪廓的特征值的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: ssss在线观看国产| 美女跪下吃男人j动态图| 女人被狂躁的免费视频网站软件| 成人午夜又粗又硬又大| 不要结婚要恋爱| 韩国免费理论片在线观看2021| 玩弄老太婆BBW视频| 国产欧美一区二区精品性 | 大学生做爰A片免费看网站| 在线观看xxxxvideo| 日产av一区二区三区| 国产短视频精品一区二区三区| 手机免费看一级片| 欧美综合久久| 奶水喷出来毛片的视频| 中文字幕无码亚洲字幕成人A刘婷 中文字幕av人妻少妇一区二区 | 色偷偷亚洲女人天堂观看欧| 久久精品成人国产午夜| 日b大全| 国产亚洲精品高清在线| 大尺度在线视频| 日本中文一区| 精品人伦一区二区三区闺蜜| 国产k频道探花精品软件优势| 女人19毛片A片久久19软件| 嗯~乖把奶罩都脱了| 亚洲视频h| 国产精品白浆一区二小说| 日本卡一卡二| 国产免费一区二区三区在线能观看| 国产一级一片免费播放电影| 午夜性直播在线观看| 男人添女人下面全视频免费看| 狠狠色丁香婷婷久久综合蜜芽| 真实国产乱人视频| 五月天桃花网| 欧美一级淫片aaaaaaa电影| 91在线国产观看| 我被主人带去多人调教故事| 亚洲腹肌男gay啪啪网站| 免费乱人伦短篇小说|