opencv2.4.13+python2.7學習筆記--OpenCV中的圖像處理--圖像輪廓特征和幾何矩


閱讀對象:對概率論中的期望有一點了解。

1.圖像幾何矩

1.1簡述

圖像的幾何矩包括空間矩、中心矩和中心歸一化矩。幾何矩具有平移、旋轉和尺度不變性,一般是用來做大粒度的區分,用來過濾顯然不相關的圖像。

1.2用數學語言闡述圖像的幾何矩

針對於一幅圖像,我們把像素的坐標看成是一個二維隨機變量(X,Y),那么一幅灰度圖像可以用二維灰度密度函數來表示,每個像素點的值可以看成是該處的密度,對某點求期望就是該圖像在該點處的矩(原點矩),一階矩和零階矩可以計算某個形狀的重心,二階矩可以計算形狀的方向,因此可以用矩來描述灰度圖像的特征。3中矩的計算結果見圖2。

圖1 數學表示

1.3opencv中求矩的函數

 
class Moments { public: ......
  // 空間矩
double m00, m10, m01, m20, m11, m02, m30, m21, m12, m03;
// 中心矩
double mu20, mu11, mu02, mu30, mu21, mu12, mu03;
// 中心歸一化矩 double nu20, nu11, nu02, nu30, nu21, nu12, nu03;
 }

2.圖像輪廓特征和幾何矩案例

'''
輪廓特征
• 查找輪廓的不同特征,例如面積,周長,重心,邊界框等。
'''
import cv2
dir='C:/Users/Thinkpad/Desktop/picture/'
img = cv2.imread(dir + 'q.jpg',0)
ret,thresh = cv2.threshold(img,127,255,0)
contours,hierarchy = cv2.findContours(thresh, 1, 2)
cnt = contours[0]#取第一個輪廓
M = cv2.moments(cnt)#計算矩
cx = int(M['m10']/M['m00'])#計算重心
cy = int(M['m01']/M['m00'])#計算重心
#輪廓的面積可以使用函數 cv2.contourArea() 計算得到,也可以使用矩(0 階矩) ,M['m00']
area = cv2.contourArea(cnt)
#輪廓周長也被稱為弧長。可以使用函數 cv2.arcLength() 計算得到。這個函數的第二參數可以用來指定對象的形狀是閉合的(True) ,還是打開的(一條曲線)
perimeter = cv2.arcLength(cnt,True)

圖2 Opencv+python中矩計算結果的展現形式

參考資料:

http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_contours/py_contours_begin/py_contours_begin.html#contours-getting-started

http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_contours/py_contour_features/py_contour_features.html

http://www.cnblogs.com/skyseraph/archive/2011/07/19/2110183.html

http://blog.csdn.net/gdfsg/article/details/51015066

 

end!!

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM