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列表。每個...