特徵(moment、contourArea、arcLength)

找出物體輪廓後,我們可以根據這個輪廓,找出這個物體的一些特徵,這邊用OpenCV的moment()、contourArea()、arcLength()函式,來找輪廓的質心、周長、面積,而這些特徵可以作為物件辨識的資訊。


OpenCV計算矩

Moments moments(InputArray array, bool binaryImage=false)

  • array:來源圖,可以輸入8位元單通道圖、浮點數2維陣列,或1xN、Nx1的Point或Point2f陣列。
  • binaryImage:影像設定,只有array為影像時才有效果,如果設定為true,所有非零的像素都列入計算。
  • 可從Moments計算質心位置。

假設返回一個Moments mu,我們可依據下式,從mu計算質心位置,m10、m00、m01、m00都是Moments的類別成員。

Point2f center = Point2f(mu.m10/mu.m00 , mu.m01/mu.m00);

OpenCV計算面積

double contourArea(InputArray contour, bool oriented=false)

  • contour:輸入輪廓,一個含有2維點的vector。
  • oriented:輪廓方向,如果設為ture的話除了面積還會記錄方向,順時鐘和逆時鐘會有正負號的差異,預設為false,不論輪廓方向都返回正的面積值。

OpenCV計算周長:

double arcLength(InputArray curve, bool closed)

  • curve:輸入輪廓,一個含有2維點的vector。
  • closed:輪廓封閉,指定curve是否封閉,
  • 返回曲線的長度或封閉輪廓的周長。