您的位置:首页 > 运维架构

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

2012-02-18 22:35 483 查看
#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;
}


下面是代码运行的结果:





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: