1. 程式人生 > >【opencv】影象和輪廓的匹配(hu矩)

【opencv】影象和輪廓的匹配(hu矩)

影象的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);