垂直投影:二维图像按照行向y轴方向上的投影。
程序中有两次注意事项:
先设置感兴趣的区域cvSetImageROI,在cvcopy。
核心代码:
void getVertical(IplImage *src,CvRect ROI,int *v)
{
FILE *p;
p = fopen("d:\\b.txt","w+");
IplImage *image = cvCreateImage(cvSize(ROI.width,ROI.height),8,1);
cvSetImageROI(src,ROI);
cvCopy(src,image);
cvThreshold(image,image,100,255,CV_THRESH_BINARY);
int x,y;
CvScalar s;
for(x=0;x<image->width;x++)
for(y=0;y<image->height;y++ )
{
s=cvGet2D(image,y,x);
if(s.val[0] == 0)
v[x]++;
}
for(x=0;x<image->width;x++)
{
cout<<v[x]<<endl;
fprintf(p,"%10d",v[x]);
}
fclose(p);
}
int main()
{
IplImage *img = cvLoadImage("templ_9.jpg",0);
cvNamedWindow("orignal",0);
cvShowImage("orignal",img);
CvRect ROI;
ROI.x = 75;
ROI.y = 10;
ROI.width= 25;
ROI.height = 30;
int v[100] = {0};
getVertical(img,ROI,v);
cvWaitKey(0);
cvDestroyWindow("origanl");
cvReleaseImage(&img);
return 0;
}