本文实例为大家分享了OpenCV计算图像的水平和垂直积分投影的具体代码,供大家参考,具体内容如下

#include

#include

#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;xwidth;x++)

{

for(y=0;yheight;y++)

{

s=cvGet2D(src,y,x);

if(s.val[0]==0)

v[x]++;

}

}

for(x=0;xwidth;x++)

{

for(y=0;y

{

t.val[0]=255;

cvSet2D(paintx,y,x,t);

}

}

for(y=0;yheight;y++)

{

for(x=0;xwidth;x++)

{

s=cvGet2D(src,y,x);

if(s.val[0]==0)

h[y]++;

}

}

for(y=0;yheight;y++)

{

for(x=0;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;

}

结果:

ae9c1c70613d16fdec547ad51a08bb3c.png

11a78b753e04eafe67be0df5b14131ae.png

0d7a6d67a0470ce874ba5682358b7732.png

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐