OpenCV--使用CvMoments求取重心

来源:互联网 发布:怎么看淘宝粉丝有谁 编辑:程序博客网 时间:2024/06/13 22:29
计算多边形和光栅形状的最高达三阶的所有矩:
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;}


原创粉丝点击