opecv(2) 直方图学习

555本来今天打算好好看书的。。结果在去实验室路上骑车摔了一跤。。电脑屏幕居然就这么就裂了。。蛋碎啊。。看了一下直方图。。

自己写了一段测试cvCalcHist的代码。。很简单。。就不一一解释了。。

int _tmain(int argc, _TCHAR* argv[])
{

    IplImage *Image = cvLoadImage("lena.jpg");
	IplImage * grayImage = cvCreateImage(cvGetSize(Image),IPL_DEPTH_8U,1);
	cvCvtColor(Image,grayImage,CV_RGB2GRAY);
	CvHistogram* hist1,*hist2;
	int size[1] = {16};
	float range[2] = {0,128};
	float *ranges[1] = {range};
	hist1 = cvCreateHist(1,size,CV_HIST_ARRAY,ranges);
	cvClearHist(hist1);
	cvCalcHist(&grayImage,hist1);
	int myHist[32]; 
	for(int i = 0;i<32;i++)
		myHist[i] = 0;
	for(int i=0;i<Image->height;i++)
	{
		uchar* ptr = (uchar*)(grayImage->imageData+i*grayImage->widthStep);
		for(int j=0;j<Image->width;j++)
		{
			myHist[*(ptr+j)/8]++;
		}
	}
	for(int i=0;i<16;i++)
	{
		printf("%f ",hist1->mat.data.fl[i]);
	}
	printf("\n");
	for(int i=0;i<32;i++)
	{
		printf("%d ",myHist[i]);
	}
	printf("\n");
	cvReleaseHist(&hist1);
	cvReleaseImage(&Image);
	cvReleaseImage(&grayImage);
	return 0;
}

最开始我的range是{0,255},size是32。。能够得到与自己统计相同的结果,但后来用{0,127}、16的时候,在最后一项统计上一直不对,后来查了下资料,发现上界应该设为128,而我最开始的range上界也应该是256,想来结果能正确的原因恐怕是lena里面木有像素值为255的点吧。。

也算不大不小的收获了。。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值