cvAvgSdv函数C语言实现

2014年10月2日 由 Creater 留言 »

cvAvgSdv用于计算均值与均方差,用C语言实现该算法如下:

IplImage *dst = cvCreateImage(cvGetSize(pm),IPL_DEPTH_64F,1);
	cvConvert(pm, dst);
	cout<<"行:"<<dst->height<<"   列:"<<dst->width<<"  step: "<<dst->widthStep<<endl;
	double *imgData  = 0;
	for(int i=0;i<dst->height;i++)
	{
		imgData=(double*)(dst->imageData +i*dst->widthStep);
		for(int j=0;j<dst->width;j++)
		{
			printf("%3.1f ", *(imgData +j));
		}
		printf("\n");
	}
	CvScalar mean;
	CvScalar dev;
	cvAvgSdv(dst,&mean,&dev,NULL);//计算图像的均值和标准差
	cout<<"均值:"<<mean.val[0]<<"方差:"<<dev.val[0]<<endl;
	double meanVal = 0, std_dev = 0;
	for(int i=0;i<dst->height;i++)
	{
		imgData=(double*)(dst->imageData +i*dst->widthStep);
		for(int j=0;j<dst->width;j++)
		{
			meanVal += (*(imgData +j));
			std_dev +=(*(imgData +j)) * (*(imgData +j));
		}
	}
	meanVal /= (dst->height * dst->width);
	std_dev /=(dst->height * dst->width);
	std_dev = sqrt(std_dev - meanVal *meanVal);
	cout<<"均值:"<<meanVal<<"方差:"<<std_dev<<endl;
	cvReleaseData(pm);
	cvReleaseMat(&pm);
广告位

发表评论

你必须 登陆 方可发表评论.