利用OpenCV计算图像的垂直和水平积分投影

#include <cv.h>
#include <highgui.h>
#pragma comment( lib, "cv.lib" )
#pragma comment( lib, "cxcore.lib" )
#pragma comment( lib, "highgui.lib" )
int main()
{	
	IplImage * src=cvLoadImage("lena.jpg",0);
//	cvSmooth(src,src,CV_BLUR,3,3,0,0);
	cvThreshold(src,src,50,255,CV_THRESH_BINARY_INV);
	IplImage* paintx=cvCreateImage( cvGetSize(src),IPL_DEPTH_8U, 1 );
	IplImage* painty=cvCreateImage( cvGetSize(src),IPL_DEPTH_8U, 1 );
	cvZero(paintx);
	cvZero(painty);
	int* v=new int[src->width];
	int* h=new int[src->height];
	memset(v,0,src->width*4);
	memset(h,0,src->height*4);
	
	int x,y;
	CvScalar s,t;
	for(x=0;x<src->width;x++)
	{
		for(y=0;y<src->height;y++)
		{
			s=cvGet2D(src,y,x);			
			if(s.val[0]==0)
				v[x]++;					
		}		
	}
	
	for(x=0;x<src->width;x++)
	{
		for(y=0;y<v[x];y++)
		{		
			t.val[0]=255;
			cvSet2D(paintx,y,x,t);		
		}		
	}
	
	for(y=0;y<src->height;y++)
	{
		for(x=0;x<src->width;x++)
		{
			s=cvGet2D(src,y,x);			
			if(s.val[0]==0)
				h[y]++;		
		}	
	}
	for(y=0;y<src->height;y++)
	{
		for(x=0;x<h[y];x++)
		{			
			t.val[0]=255;
			cvSet2D(painty,y,x,t);			
		}		
	}
	cvNamedWindow("二值图像",1);
	cvNamedWindow("垂直积分投影",1);
	cvNamedWindow("水平积分投影",1);
	cvShowImage("二值图像",src);
	cvShowImage("垂直积分投影",paintx);
	cvShowImage("水平积分投影",painty);
	cvWaitKey(0);
	cvDestroyAllWindows();
	cvReleaseImage(&src);
	cvReleaseImage(&paintx);
	cvReleaseImage(&painty);
	return 0;
}

下面是代码运行的结果:

 


评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值