【opencv】影象和輪廓的匹配(hu矩)
阿新 • • 發佈:2019-01-01
影象的hu矩具有平移不變、尺度不變和旋轉不變性。
(1)中心矩:構造平移不變性。利用質心座標構造影象的中心矩。
(2)歸一化中心矩:構造尺度不變性。
(3)hu矩:構造旋轉不變性。
opencv的實現計算hu矩:
(1)普通矩和中心矩的計算
void cvMoments(const CvArr* arr,cvMoments* moments,int binary=0);
void cvGetHuMoments(cvMoments* moment,cvHuMoments* hu_moments);
#include "cv.h" #include "highgui.h" #include "cxcore.h" #include "cvaux.h" int main(int argc, char* argv[]) { //產生一幅影象 IplImage* src; src = cvCreateImage(cvSize(10,10),8,1); //影象初始值清零 cvZero(src); //影象的前面5行5列賦值為255 for(int yy=0;yy<5;yy++) { for(int xx=0;xx<5;xx++) { cvSetReal2D(src,yy,xx,255); } } double m00,m10,m01; //定義矩變數 CvMoments moment; //計算原始矩和中心矩 cvMoments(src,&moment,2); m00 = cvGetSpatialMoment(&moment,0,0); m10 = cvGetSpatialMoment(&moment,1,0); m01 = cvGetSpatialMoment(&moment,0,1); //計算質心座標 float x = (float)(m10/m00); float y = (float)(m01/m00); //定義hu矩變數 CvHuMoments humoment; //計算hu矩 cvGetHuMoments(&moment,&humoment); return 0; }
形狀的匹配:
double cvMatchShapes(const void* object1,const void* object2,int method,double parameter=0);