python opencv 輪廓屬性

2021-09-02 00:10:53 字數 2219 閱讀 9439

import cv2

import numpy as np

# .高寬比

# 函式cv2.moments()會給你乙個字典,包含所有矩值

m = cv2.moments(cnt)

# 這是目標的邊界矩形的寬高比

x,y,w,h=cv2.boundingrect(cnt)

aspect_ratio=

float

(w)/h

# extent

# extent是輪廓面積和邊界矩形面積的比率

area = cv2.contourarea(cnt)

x,y,w,h = cv2.boundingrect(cnt)

rect_area = w*h

extent =

float

(area)

/rect_area

# solidity

# 是輪廓面積和凸形外殼面積的比率

area = cv2.contourarea(cnt)

hull = cv2.convexhull(cnt)

hull_area = cv2.contourarea(hull)

solidity =

float

(area)

/hull_area

# 等價半徑

# 是面積和輪廓面積一樣的圓的半徑

area=cv2.contourarea(cnt)

equi_diameter=np.sqrt(

4*area/np.pi)

# .方向

# 目標的方向角度。下面的方法可以得到長軸和短軸長度

(x,y)

,(ma,ma)

,angle=cv2.fitellipse(cnt)

# 構成目標的所有點

# 這裡,兩個方法,乙個使用numpy函式,另乙個使用opencv函式(最後的注釋行)達到同樣目的。結果也是相同的。

# 不同的一點是numpy給的座標是(row, column)格式,而opencv給的座標是(x, y)格式,所以基本上結果可以互相轉換。row = x , column = y

mask = np.zeros(imgray.shape,np.uint8)

cv2.drawcontours(mask,

[cnt],0

,255,-

1)pixelpoints = np.transpose(np.nonzero(mask)

)#pixelpoints = cv2.findnonzero(mask)

# 最大值,最小值以及他們的位置

min_val,max_val,min_loc,max_loc=cv2.minmaxloc(imgray,mask=mask)

# 平均顏色和平均強度

# 我們可以得到目標的平均顏色。或者是灰度模式下的平均亮度

mean_val=cv2.mean(im,mask=mask)

# .端點

# 端點表示最高點,最低點,最左和最右點。

leftmost =

tuple

(cnt[cnt[:,

:,0]

.argmin()]

[0])

rightmost=

tuple

(cnt[cnt[:,

:,0]

.argmax()]

[0])

topmost=

tuple

(cnt[cnt[:,

:,1]

.argmin()]

[0])

bottommost=

tuple

(cnt[cnt[:,

:,1]

.argmax()]

[0])

python opencv 輪廓檢測

輪廓 contours 指的是有相同顏色或者密度,連線所有連續點的一條曲線。檢測輪廓的工作對形狀分析和物體檢測與識別都非常有用。在輪廓檢測之前,首先要對進行二值化或者canny邊緣檢測。在opencv中,尋找的物體是白色的,而背景必須是黑色的,因此預處理時必須保證這一點。import cv2 讀入i...

python opencv 輪廓層級

一般來說我們用cv2.findcontours 函式來檢測影象裡的目標,有時候目標在不同的地方,但是在有些情況下,有些圖形在別的圖形裡面,就像圖形巢狀,在這種情況下,我們把外面那層圖形叫做parent,裡面的叫child。這樣圖形裡的輪廓之間就有了關係。我們可以指定乙個輪廓和其他之間的是如何連線的,...

python opencv 輪廓基本繪製

什麼是輪廓?輪廓可以簡單地解釋為連線具有相同顏色或強度的所有連續點 沿邊界 的曲線。輪廓是用於形狀分析以及物件檢測和識別的有用工具。findcontour 函式中有三個引數,第乙個是源影象,第二個是輪廓檢索模式,第三個是輪廓逼近方法。輸出等高線和層次結構。輪廓是影象中所有輪廓的python列表。每個...