OpenCV--使用CvMoments求取重心

计算多边形和光栅形状的最高达三阶的所有矩:
void cvMoments( const CvArr* arr, CvMoments* moments, int binary=0 );
arr图像 (1-通道或3-通道,有COI设置) 或多边形(点的 CvSeq 或一族点的向量).
moments返回的矩状态接口的指针
binary(仅对 图像) 如果标识为非零,则所有零象素点被当成零,其它的被看成 1.
函数 cvMoments 计算最高达三阶的空间和中心矩,并且将结果存在结构 moments 中。矩用来计算形状的重心,面积,主轴和其它的形状特征,如 7 Hu 不变量等.

#include "cv.h" 
#include "highgui.h" 
#include "cvaux.h"
#include "cxcore.h"
#include <stdio.h>
#include <vector>
using namespace std;
using namespace cv;

void main()
{
	CvMemStorage* storage_r= cvCreateMemStorage(0);
	CvSeq* seq_r= cvCreateSeq(CV_32FC2, sizeof(CvSeq), sizeof(CvPoint2D32f), storage_r);

	cvSeqPush(seq_r, &cvPoint2D32f(0,50));
	cvSeqPush(seq_r, &cvPoint2D32f(-50,0));
	cvSeqPush(seq_r, &cvPoint2D32f(50,0));
	cvSeqPush(seq_r, &cvPoint2D32f(0,-50));

	double m00, m10, m01;
	CvMoments moment;
	cvMoments(seq_r, &moment, 0);
	
	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);
	return;
}


你可能感兴趣的:(OpenCV--使用CvMoments求取重心)