还非得输入长度30-10000的问题描述。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
opencv中的一段代码,希望有人可以解释下。
就是从垂直投影开始的代码处 没有看懂,好几个循环, 希望大牛可以帮忙解释下,刚接触OPENCV不久。
难道代码没有 传上来 吗
```#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
#include <math.h>
#define START 57
#define END 181
#define MOD_MAX 15
#define MOD_MIN 3
#define WIDTH 34 //模板宽度宽度
#define S(image,x,y) ((uchar*)(image->imageData + image->widthStep*(y)))[(x)]
int main()
{
IplImage *src=0;
IplImage *pImg8uSmooth=NULL; //高斯滤波后的图
IplImage *pImgHist=NULL;
IplImage *pImgThreshold=NULL;
IplImage *pImgResize=NULL; //归一化为高90,宽409的图像
src=cvLoadImage("E:/image/car1/77.jpg",0);
if(!src)
printf("can not load file: %s","E:\\tupain\\1.jpg");
else
{
int nWidth=409,nHeight=90;
pImg8uSmooth=cvCreateImage(cvSize(nWidth,nHeight),IPL_DEPTH_8U,1);
pImgThreshold=cvCreateImage(cvSize(nWidth,nHeight),IPL_DEPTH_8U,1);
pImgResize=cvCreateImage(cvSize(nWidth,nHeight),IPL_DEPTH_8U,1);//归一化
cvResize(src,pImgResize,CV_INTER_LINEAR); //线性插值
cvSmooth(pImgResize,pImg8uSmooth,CV_GAUSSIAN,3,0,0);//高斯滤波
cvThreshold(pImg8uSmooth,pImgThreshold,100,255,CV_THRESH_BINARY );
int l_sum[409]={0},modle[WIDTH]={0},subre[WIDTH]={0};
int sum=0,i=0,j=0,k=0,g=0;
int rig=0,end=0;//分隔符开始与结束位置
int flag=0;
modle[0]=MOD_MIN*255;
modle[1]=MOD_MIN*255;
modle[WIDTH-1]=MOD_MIN*255;
modle[WIDTH-2]=MOD_MIN*255;
for(i=2;i<WIDTH-2;i++)modle[i]=MOD_MAX*255;
printf("The pImgThreshold->height is:%d and pImgThreshold->width is: %d\n",pImgThreshold->height,pImgThreshold->width);
printf("垂直投影\n");//垂直投影
for(i=0;i<pImgThreshold->width;i++)
{ sum=0;
for(j=0;j<pImgThreshold->height;j++)
{
sum=S(pImgThreshold,i,j)+sum;//灰度之和
}
l_sum[i]=sum;
//printf("The l_sum[%d]=%d\n",i,l_sum[i]);
}
flag=0;
int m=WIDTH;
while(m>7)
{
for(i=START;i+m<END;i++)
{
for(j=0,g=i;j<m;j++,g++)
{
subre[j]=modle[j]-l_sum[g];
// printf("The subre[%d]=%d\n",j,subre[j]);
// printf("The l_sum[%d]=%d\n",g,l_sum[g]);
}
j=0;
while(subre[j]>0&&j<m)j++;
if(j==m)
{
flag=1;
rig=i;
end=rig+m;
break;
}
}
if(!flag)
{
modle[m-3]=modle[m-1];
modle[m-4]=modle[m-2];
m--;
}
else break;
}
if(m<=7) printf("have not found the rig and end",rig,end);
printf("orig=%d and end=%d\n",rig,end);
int min_value=0,min_col=0;//最小值及其所在列
int oneright=0,oneleft=0,twoleft=0,threeright=0,fourleft=0,fourright=0,fiveleft=0,fiveright=0,sixleft=0,sixright=0,sevenleft=0,sevenright=0;
i=rig-(int)((45/90.0)*pImgThreshold->height)-1;
min_value=l_sum[i];
min_col=i;
for(;i>=rig-(int)((57/90.0)*pImgThreshold->height)-1;i--)
{
// printf ("l_sum[%d]=%d\n",i,l_sum[i]);
if(min_value>l_sum[i])
{
min_value=l_sum[i];
min_col=i;
}
}
for(i=min_col;i<min_col+(int)((12/90.0)*pImgThreshold->height);i++)
{
// printf ("l_sum[%d]=%d\n",i,l_sum[i]);
if(l_sum[i]>3*255)
{
twoleft=i;break;
}
}
if(i>=min_col+(int)((12/90.0)*pImgThreshold->height))
{
printf("hvan not found the twoleft\n");
twoleft=rig-(int)((51/90.0)*pImgThreshold->height);
}
for(i=min_col;i>min_col-(int)((12/90.0)*pImgThreshold->height);i--)
{
//printf ("l_sum[%d]=%d\n",i,l_sum[i]);
if(l_sum[i]>3*255)
{
oneright=i;break;
}
}
if(i<=min_col-(int)((12/90.0)*pImgThreshold->height))
{
printf("hvan not found the oneright\n");
oneright=rig-(int)((51/90.0)*pImgThreshold->height);
}
printf("the oneright=%d and twoleft=%d\n",oneright,twoleft);
i=oneright-(int)((40/90.0)*pImgThreshold->height)-1;
min_value=l_sum[i];
min_col=i;
for(;i>=oneright-(int)((52/90.0)*pImgThreshold->height)-1;i--)
{
// printf ("l_sum[%d]=%d\n",i,l_sum[i]);
if(min_value>l_sum[i])
{
min_value=l_sum[i];
min_col=i;
}
}
for(i=min_col;i<min_col+(int)((12/90.0)*pImgThreshold->height);i++)
{
// printf ("l_sum[%d]=%d\n",i,l_sum[i]);
if(l_sum[i]>3*255)
{
oneleft=i;break;
}
}
if(i>=min_col+(int)((12/90.0)*pImgThreshold->height))
{
printf("hvan not found the oneleft\n");
oneleft=oneright-(int)((51/90.0)*pImgThreshold->height);
}
if(oneleft<0){ oneleft=0;printf("have not found the oneleft\n");}
printf("the oneleft=%d\n",oneleft);
i=end+(int)((45/90.0)*pImgThreshold->height)+1;
min_value=l_sum[i];
min_col=i;
for(;i<=end+(int)((57/90.0)*pImgThreshold->height);i++)
{
//printf ("l_sum[%d]=%d\n",i,l_sum[i]);
if(min_value>l_sum[i])
{
min_value=l_sum[i];
min_col=i;
}
}
for(i=min_col;i>min_col-(int)((12/90.0)*pImgThreshold->height);i--)
{
//printf ("l_sum[%d]=%d\n",i,l_sum[i]);
if(l_sum[i]>3*255)
{
threeright=i;break;
}
}
if(i<=min_col-(int)((12/90.0)*pImgThreshold->height))
{
printf("hvan not found the threerigth\n");
threeright=end+(51/90)*pImgThreshold->height;
}
for(i=min_col;i<min_col+(int)((12/90.0)*pImgThreshold->height);i++)
{
//printf ("l_sum[%d]=%d\n",i,l_sum[i]);
if(l_sum[i]>3*255)
{
fourleft=i;break;
}
}
if(i>=min_col+(int)((12/90.0)*pImgThreshold->height))
{
//printf("hvan not found the fourleft\n");
fourleft=end+(51/90)*pImgThreshold->height;
}
printf("the threeright=%d and the fourletf=%d\n",threeright,fourleft);
i=fourleft+(int)((45/90.0)*pImgThreshold->height)+1;
min_value=l_sum[i];
min_col=i;
for(;i<=fourleft+(int)((57/90.0)*pImgThreshold->height);i++)
{
//printf ("l_sum[%d]=%d\n",i,l_sum[i]);
if(min_value>l_sum[i])
{
min_value=l_sum[i];
min_col=i;
}
}
for(i=min_col;i>min_col-(int)((12/90.0)*pImgThreshold->height);i--)
{
// printf ("l_sum[%d]=%d\n",i,l_sum[i]);
if(l_sum[i]>3*255)
{
fourright=i;break;
}
}
if(i<=min_col-(int)((12/90.0)*pImgThreshold->height))
{
printf("hvan not found the fouright\n");
fourright=fourleft+(int)((51/90.0)*pImgThreshold->height);
}
for(i=min_col;i<min_col+(int)((12/90.0)*pImgThreshold->height);i++)
{
// printf ("l_sum[%d]=%d\n",i,l_sum[i]);
if(l_sum[i]>3*255)
{
fiveleft=i;break;
}
}
if(i>=min_col+(int)((12/90.0)*pImgThreshold->height))
{
printf("hvan not found the fiveright\n");
fiveleft=fourleft+(int)((51/90.0)*pImgThreshold->height);
}
printf("the fourright=%d and the fiveleft=%d\n",fourright,fiveleft);
i=fiveleft+(int)((45/90.0)*pImgThreshold->height)+1;
min_value=l_sum[i];
min_col=i;
for(;i<=fiveleft+(int)((57/90.0)*pImgThreshold->height);i++)
{
// printf ("l_sum[%d]=%d\n",i,l_sum[i]);
if(min_value>l_sum[i])
{
min_value=l_sum[i];
min_col=i;
}
}
for(i=min_col;i>min_col-(int)((12/90.0)*pImgThreshold->height);i--)
{
// printf ("l_sum[%d]=%d\n",i,l_sum[i]);
if(l_sum[i]>3*255)
{
fiveright=i;break;
}
}
if(i<=min_col-(int)((12/90.0)*pImgThreshold->height))
{
printf("hvan not found the fiveright\n");
fiveright=fiveleft+(int)((51/90.0)*pImgThreshold->height);
}
for(i=min_col;i<min_col+(int)((12/90.0)*pImgThreshold->height);i++)
{
//printf ("l_sum[%d]=%d\n",i,l_sum[i]);
if(l_sum[i]>3*255)
{
sixleft=i;break;
}
}
if(i>=min_col+(int)((12/90.0)*pImgThreshold->height))
{
printf("hvan not found the sixright\n");
sixleft= fiveleft+(int)((51/90.0)*pImgThreshold->height);
}
printf("the fiveright=%d and the sixleft=%d\n",fiveright,sixleft);
i=sixleft+(int)((45/90.0)*pImgThreshold->height)+1;
min_value=l_sum[i];
min_col=i;
for(;i<=sixleft+(int)((57/90.0)*pImgThreshold->height);i++)
{
// printf ("l_sum[%d]=%d\n",i,l_sum[i]);
if(min_value>l_sum[i])
{
min_value=l_sum[i];
min_col=i;
}
}
for(i=min_col;i>min_col-(int)((12/90.0)*pImgThreshold->height);i--)
{
//printf ("l_sum[%d]=%d\n",i,l_sum[i]);
if(l_sum[i]>3*255)
{
sixright=i;break;
}
}
if(i<=min_col-(int)((12/90.0)*pImgThreshold->height))
{
//printf("hvan not found the fiveright\n");
sixright=sixleft+(int)((51/90.0)*pImgThreshold->height);
}
for(i=min_col;i<min_col+(int)((12/90.0)*pImgThreshold->height);i++)
{
//printf ("l_sum[%d]=%d\n",i,l_sum[i]);
if(l_sum[i]>3*255)
{
sevenleft=i;break;
}
}
if(i>=min_col+(int)((12/90.0)*pImgThreshold->height))
{
printf("hvan not found the sixright\n");
sevenleft=sixleft+(int)((51/90.0)*pImgThreshold->height);
}
printf("the sixright=%d and the sevenleft=%d\n",sixright,sevenleft);
i=sevenleft+(int)((45/90.0)*pImgThreshold->height)+1;
min_value=l_sum[i];
min_col=i;
for(;(i<=sevenleft+(int)((57/90.0)*pImgThreshold->height))&&i<pImgThreshold->width;i++)
{
// printf ("l_sum[%d]=%d\n",i,l_sum[i]);
if(min_value>l_sum[i])
{
min_value=l_sum[i];
min_col=i;
}
}
for(i=min_col;i>min_col-(int)((12/90.0)*pImgThreshold->height);i--)
{
//printf ("l_sum[%d]=%d\n",i,l_sum[i]);
if(l_sum[i]>3*255)
{
sevenright=i;break;
}
}
if(i<=min_col-(int)((12/90.0)*pImgThreshold->height))
{
printf("hvan not found the fiveright\n");
sevenright=sevenleft+(int)((51/90.0)*pImgThreshold->height);
}
if(sevenright>pImgThreshold->width-1){ sevenright=pImgThreshold->width-1;printf("have not found the sevenright\n");}
printf("the sevenrigh=%d\n", sevenright);
cvLine(pImgThreshold,cvPoint(oneleft,0),cvPoint(oneleft,pImgThreshold->height),cvScalar(188,0,0),1,8,0);
cvLine(pImgThreshold,cvPoint(oneright,0),cvPoint(oneright,pImgThreshold->height),cvScalar(188,0,0),1,8,0);
cvLine(pImgThreshold,cvPoint(twoleft,0),cvPoint(twoleft,pImgThreshold->height),cvScalar(255,0,0),1,8,0);
cvLine(pImgThreshold,cvPoint(rig,0),cvPoint(rig,pImgThreshold->height),cvScalar(188,0,0),1,8,0);
cvLine(pImgThreshold,cvPoint(end,0),cvPoint(end,pImgThreshold->height),cvScalar(255,0,0),1,8,0);
cvLine(pImgThreshold,cvPoint(threeright,0),cvPoint(threeright,pImgThreshold->height),cvScalar(188,0,0),1,8,0);
cvLine(pImgThreshold,cvPoint(fourleft,0),cvPoint(fourleft,pImgThreshold->height),cvScalar(255,0,0),1,8,0);
cvLine(pImgThreshold,cvPoint(fourright,0),cvPoint(fourright,pImgThreshold->height),cvScalar(188,0,0),1,8,0);
cvLine(pImgThreshold,cvPoint(fiveleft,0),cvPoint(fiveleft,pImgThreshold->height),cvScalar(255,0,0),1,8,0);
cvLine(pImgThreshold,cvPoint(fiveright,0),cvPoint(fiveright,pImgThreshold->height),cvScalar(188,0,0),1,8,0);
cvLine(pImgThreshold,cvPoint(sixleft,0),cvPoint(sixleft,pImgThreshold->height),cvScalar(255,0,0),1,8,0);
cvLine(pImgThreshold,cvPoint(sixright,0),cvPoint(sixright,pImgThreshold->height),cvScalar(188,0,0),1,8,0);
cvLine(pImgThreshold,cvPoint(sevenleft,0),cvPoint(sevenleft,pImgThreshold->height),cvScalar(255,0,0),1,8,0);
cvLine(pImgThreshold,cvPoint(sevenright,0),cvPoint(sevenright,pImgThreshold->height),cvScalar(188,0,0),1,8,0);
IplImage *pImgCharOne=NULL;//截取字符
IplImage *pImgCharTwo=NULL;
IplImage *pImgCharThree=NULL;
IplImage *pImgCharFour=NULL;
IplImage *pImgCharFive=NULL;
IplImage *pImgCharSix=NULL;
IplImage *pImgCharSeven=NULL;
pImgCharOne=cvCreateImage(cvSize(oneright-oneleft+1,nHeight),IPL_DEPTH_8U,1);
pImgCharTwo=cvCreateImage(cvSize(rig-twoleft+2,nHeight),IPL_DEPTH_8U,1);
pImgCharThree=cvCreateImage(cvSize(threeright-end+2,nHeight),IPL_DEPTH_8U,1);
pImgCharFour=cvCreateImage(cvSize(fourright-fourleft+2,nHeight),IPL_DEPTH_8U,1);
pImgCharFive=cvCreateImage(cvSize(fiveright-fiveleft+2,nHeight),IPL_DEPTH_8U,1);
pImgCharSix=cvCreateImage(cvSize(sixright-sixleft+2,nHeight),IPL_DEPTH_8U,1);
pImgCharSeven=cvCreateImage(cvSize(sevenright-sevenleft+1,nHeight),IPL_DEPTH_8U,1);
CvRect ROI_rect1;
ROI_rect1.x=oneleft;
ROI_rect1.y=0;
ROI_rect1.width=oneright-oneleft+1;
ROI_rect1.height=pImgResize->height;
cvSetImageROI(pImgResize,ROI_rect1);
cvCopy(pImgResize,pImgCharOne,NULL); //获取第1个字符
cvResetImageROI(pImgResize);
ROI_rect1.x=twoleft-1;
ROI_rect1.y=0;
ROI_rect1.width=rig-twoleft+2;
ROI_rect1.height=pImgResize->height;
cvSetImageROI(pImgResize,ROI_rect1);
cvCopy(pImgResize,pImgCharTwo,NULL); //获取第2个字符
cvResetImageROI(pImgResize);
ROI_rect1.x=end-1;
ROI_rect1.y=0;
ROI_rect1.width=threeright-end+2;
ROI_rect1.height=pImgResize->height;
cvSetImageROI(pImgResize,ROI_rect1);
cvCopy(pImgResize,pImgCharThree,NULL); //获取第3个字符
cvResetImageROI(pImgResize);
ROI_rect1.x=fourleft-1;
ROI_rect1.y=0;
ROI_rect1.width=fourright-fourleft+2;
ROI_rect1.height=pImgResize->height;
cvSetImageROI(pImgResize,ROI_rect1);
cvCopy(pImgResize,pImgCharFour,NULL); //获取第4个字符
cvResetImageROI(pImgResize);
ROI_rect1.x=fiveleft-1;
ROI_rect1.y=0;
ROI_rect1.width=fiveright-fiveleft+2;
ROI_rect1.height=pImgResize->height;
cvSetImageROI(pImgResize,ROI_rect1);
cvCopy(pImgResize,pImgCharFive,NULL); //获取第5个字符
cvResetImageROI(pImgResize);
ROI_rect1.x=sixleft-1;
ROI_rect1.y=0;
ROI_rect1.width=sixright-sixleft+2;
ROI_rect1.height=pImgResize->height;
cvSetImageROI(pImgResize,ROI_rect1);
cvCopy(pImgResize,pImgCharSix,NULL); //获取第6个字符
cvResetImageROI(pImgResize);
ROI_rect1.x=sevenleft-1;
ROI_rect1.y=0;
ROI_rect1.width=sevenright-sevenleft+1;
ROI_rect1.height=pImgResize->height;
cvSetImageROI(pImgResize,ROI_rect1);
cvCopy(pImgResize,pImgCharSeven,NULL); //获取第7个字符
cvResetImageROI(pImgResize);
cvNamedWindow("垂直投影",CV_WINDOW_AUTOSIZE);
cvMoveWindow("垂直投影",0,0);
cvShowImage("垂直投影",pImgThreshold);
//cvSaveImage("E:\\new\\23.jpg",pImgThreshold);
cvNamedWindow("one",CV_WINDOW_AUTOSIZE);
cvMoveWindow("one",0,300);
cvShowImage("one",pImgCharOne);
cvNamedWindow("two",1);
cvMoveWindow("two",50,300);
cvShowImage("two",pImgCharTwo);
//cvSaveImage("E:\\library\\0.jpg",pImgCharTwo);
cvNamedWindow("three",1);
cvMoveWindow("three",100,300);
cvShowImage("three",pImgCharThree);
//cvSaveImage("E:\\library\\0.jpg",pImgCharThree);
cvNamedWindow("four",1);
cvMoveWindow("four",150,300);
cvShowImage("four",pImgCharFour);
//cvSaveImage("E:\\library\\17.jpg",pImgCharFour);
cvNamedWindow("five",1);
cvMoveWindow("five",200,300);
cvShowImage("five",pImgCharFive);
//cvSaveImage("E:\\library\\3.jpg",pImgCharFive);
cvNamedWindow("six",1);
cvMoveWindow("six",250,300);
cvShowImage("six",pImgCharSix);
//cvSaveImage("E:\\library\\1.jpg",pImgCharSix);
cvNamedWindow("seven",1);
cvMoveWindow("seven",300,300);
cvShowImage("seven",pImgCharSeven);
//cvSaveImage("E:\\library\\14.jpg",pImgCharSeven);
cvWaitKey();
cvReleaseImage(&pImgThreshold);
cvDestroyWindow("显示高斯滤波后图像");
cvDestroyWindow("one");
cvReleaseImage(&pImgCharOne);
cvDestroyWindow("two");
cvReleaseImage(&pImgCharTwo);
cvDestroyWindow("three");
cvReleaseImage(&pImgCharThree);
cvDestroyWindow("four");
cvReleaseImage(&pImgCharFour);
cvDestroyWindow("five");
cvReleaseImage(&pImgCharFive);
cvDestroyWindow("six");
cvReleaseImage(&pImgCharSix);
cvDestroyWindow("seven");
cvReleaseImage(&pImgCharSeven);
return -1;
}
return 0;
}
```#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
#include <math.h>
#define START 57
#define END 181
#define MOD_MAX 15
#define MOD_MIN 3
#define WIDTH 34 //模板宽度宽度
#define S(image,x,y) ((uchar*)(image->imageData + image->widthStep*(y)))[(x)]
int main()
{
IplImage *src=0;
IplImage *pImg8uSmooth=NULL; //高斯滤波后的图
IplImage *pImgHist=NULL;
IplImage *pImgThreshold=NULL;
IplImage *pImgResize=NULL; //归一化为高90,宽409的图像
src=cvLoadImage("E:/image/car1/77.jpg",0);
if(!src)
printf("can not load file: %s","E:\\tupain\\1.jpg");
else
{
int nWidth=409,nHeight=90;
pImg8uSmooth=cvCreateImage(cvSize(nWidth,nHeight),IPL_DEPTH_8U,1);
pImgThreshold=cvCreateImage(cvSize(nWidth,nHeight),IPL_DEPTH_8U,1);
pImgResize=cvCreateImage(cvSize(nWidth,nHeight),IPL_DEPTH_8U,1);//归一化
cvResize(src,pImgResize,CV_INTER_LINEAR); //线性插值
cvSmooth(pImgResize,pImg8uSmooth,CV_GAUSSIAN,3,0,0);//高斯滤波
cvThreshold(pImg8uSmooth,pImgThreshold,100,255,CV_THRESH_BINARY );
int l_sum[409]={0},modle[WIDTH]={0},subre[WIDTH]={0};
int sum=0,i=0,j=0,k=0,g=0;
int rig=0,end=0;//分隔符开始与结束位置
int flag=0;
modle[0]=MOD_MIN*255;
modle[1]=MOD_MIN*255;
modle[WIDTH-1]=MOD_MIN*255;
modle[WIDTH-2]=MOD_MIN*255;
for(i=2;i<WIDTH-2;i++)modle[i]=MOD_MAX*255;
printf("The pImgThreshold->height is:%d and pImgThreshold->width is: %d\n",pImgThreshold->height,pImgThreshold->width);
printf("垂直投影\n");//垂直投影
for(i=0;i<pImgThreshold->width;i++)
{ sum=0;
for(j=0;j<pImgThreshold->height;j++)
{
sum=S(pImgThreshold,i,j)+sum;//灰度之和
}
l_sum[i]=sum;
//printf("The l_sum[%d]=%d\n",i,l_sum[i]);
}
flag=0;
int m=WIDTH;
while(m>7)
{
for(i=START;i+m<END;i++)
{
for(j=0,g=i;j<m;j++,g++)
{
subre[j]=modle[j]-l_sum[g];
// printf("The subre[%d]=%d\n",j,subre[j]);
// printf("The l_sum[%d]=%d\n",g,l_sum[g]);
}
j=0;
while(subre[j]>0&&j<m)j++;
if(j==m)
{
flag=1;
rig=i;
end=rig+m;
break;
}
}
if(!flag)
{
modle[m-3]=modle[m-1];
modle[m-4]=modle[m-2];
m--;
}
else break;
}
if(m<=7) printf("have not found the rig and end",rig,end);
printf("orig=%d and end=%d\n",rig,end);
int min_value=0,min_col=0;//最小值及其所在列
int oneright=0,oneleft=0,twoleft=0,threeright=0,fourleft=0,fourright=0,fiveleft=0,fiveright=0,sixleft=0,sixright=0,sevenleft=0,sevenright=0;
i=rig-(int)((45/90.0)*pImgThreshold->height)-1;
min_value=l_sum[i];
min_col=i;
for(;i>=rig-(int)((57/90.0)*pImgThreshold->height)-1;i--)
{
// printf ("l_sum[%d]=%d\n",i,l_sum[i]);
if(min_value>l_sum[i])
{
min_value=l_sum[i];
min_col=i;
}
}
for(i=min_col;i<min_col+(int)((12/90.0)*pImgThreshold->height);i++)
{
// printf ("l_sum[%d]=%d\n",i,l_sum[i]);
if(l_sum[i]>3*255)
{
twoleft=i;break;
}
}
if(i>=min_col+(int)((12/90.0)*pImgThreshold->height))
{
printf("hvan not found the twoleft\n");
twoleft=rig-(int)((51/90.0)*pImgThreshold->height);
}
for(i=min_col;i>min_col-(int)((12/90.0)*pImgThreshold->height);i--)
{
//printf ("l_sum[%d]=%d\n",i,l_sum[i]);
if(l_sum[i]>3*255)
{
oneright=i;break;
}
}
if(i<=min_col-(int)((12/90.0)*pImgThreshold->height))
{
printf("hvan not found the oneright\n");
oneright=rig-(int)((51/90.0)*pImgThreshold->height);
}
printf("the oneright=%d and twoleft=%d\n",oneright,twoleft);
i=oneright-(int)((40/90.0)*pImgThreshold->height)-1;
min_value=l_sum[i];
min_col=i;
for(;i>=oneright-(int)((52/90.0)*pImgThreshold->height)-1;i--)
{
// printf ("l_sum[%d]=%d\n",i,l_sum[i]);
if(min_value>l_sum[i])
{
min_value=l_sum[i];
min_col=i;
}
}
for(i=min_col;i<min_col+(int)((12/90.0)*pImgThreshold->height);i++)
{
// printf ("l_sum[%d]=%d\n",i,l_sum[i]);
if(l_sum[i]>3*255)
{
oneleft=i;break;
}
}
if(i>=min_col+(int)((12/90.0)*pImgThreshold->height))
{
printf("hvan not found the oneleft\n");
oneleft=oneright-(int)((51/90.0)*pImgThreshold->height);
}
if(oneleft<0){ oneleft=0;printf("have not found the oneleft\n");}
printf("the oneleft=%d\n",oneleft);
i=end+(int)((45/90.0)*pImgThreshold->height)+1;
min_value=l_sum[i];
min_col=i;
for(;i<=end+(int)((57/90.0)*pImgThreshold->height);i++)
{
//printf ("l_sum[%d]=%d\n",i,l_sum[i]);
if(min_value>l_sum[i])
{
min_value=l_sum[i];
min_col=i;
}
}
for(i=min_col;i>min_col-(int)((12/90.0)*pImgThreshold->height);i--)
{
//printf ("l_sum[%d]=%d\n",i,l_sum[i]);
if(l_sum[i]>3*255)
{
threeright=i;break;
}
}
if(i<=min_col-(int)((12/90.0)*pImgThreshold->height))
{
printf("hvan not found the threerigth\n");
threeright=end+(51/90)*pImgThreshold->height;
}
for(i=min_col;i<min_col+(int)((12/90.0)*pImgThreshold->height);i++)
{
//printf ("l_sum[%d]=%d\n",i,l_sum[i]);
if(l_sum[i]>3*255)
{
fourleft=i;break;
}
}
if(i>=min_col+(int)((12/90.0)*pImgThreshold->height))
{
//printf("hvan not found the fourleft\n");
fourleft=end+(51/90)*pImgThreshold->height;
}
printf("the threeright=%d and the fourletf=%d\n",threeright,fourleft);
i=fourleft+(int)((45/90.0)*pImgThreshold->height)+1;
min_value=l_sum[i];
min_col=i;
for(;i<=fourleft+(int)((57/90.0)*pImgThreshold->height);i++)
{
//printf ("l_sum[%d]=%d\n",i,l_sum[i]);
if(min_value>l_sum[i])
{
min_value=l_sum[i];
min_col=i;
}
}
for(i=min_col;i>min_col-(int)((12/90.0)*pImgThreshold->height);i--)
{
// printf ("l_sum[%d]=%d\n",i,l_sum[i]);
if(l_sum[i]>3*255)
{
fourright=i;break;
}
}
if(i<=min_col-(int)((12/90.0)*pImgThreshold->height))
{
printf("hvan not found the fouright\n");
fourright=fourleft+(int)((51/90.0)*pImgThreshold->height);
}
for(i=min_col;i<min_col+(int)((12/90.0)*pImgThreshold->height);i++)
{
// printf ("l_sum[%d]=%d\n",i,l_sum[i]);
if(l_sum[i]>3*255)
{
fiveleft=i;break;
}
}
if(i>=min_col+(int)((12/90.0)*pImgThreshold->height))
{
printf("hvan not found the fiveright\n");
fiveleft=fourleft+(int)((51/90.0)*pImgThreshold->height);
}
printf("the fourright=%d and the fiveleft=%d\n",fourright,fiveleft);
i=fiveleft+(int)((45/90.0)*pImgThreshold->height)+1;
min_value=l_sum[i];
min_col=i;
for(;i<=fiveleft+(int)((57/90.0)*pImgThreshold->height);i++)
{
// printf ("l_sum[%d]=%d\n",i,l_sum[i]);
if(min_value>l_sum[i])
{
min_value=l_sum[i];
min_col=i;
}
}
for(i=min_col;i>min_col-(int)((12/90.0)*pImgThreshold->height);i--)
{
// printf ("l_sum[%d]=%d\n",i,l_sum[i]);
if(l_sum[i]>3*255)
{
fiveright=i;break;
}
}
if(i<=min_col-(int)((12/90.0)*pImgThreshold->height))
{
printf("hvan not found the fiveright\n");
fiveright=fiveleft+(int)((51/90.0)*pImgThreshold->height);
}
for(i=min_col;i<min_col+(int)((12/90.0)*pImgThreshold->height);i++)
{
//printf ("l_sum[%d]=%d\n",i,l_sum[i]);
if(l_sum[i]>3*255)
{
sixleft=i;break;
}
}
if(i>=min_col+(int)((12/90.0)*pImgThreshold->height))
{
printf("hvan not found the sixright\n");
sixleft= fiveleft+(int)((51/90.0)*pImgThreshold->height);
}
printf("the fiveright=%d and the sixleft=%d\n",fiveright,sixleft);
i=sixleft+(int)((45/90.0)*pImgThreshold->height)+1;
min_value=l_sum[i];
min_col=i;
for(;i<=sixleft+(int)((57/90.0)*pImgThreshold->height);i++)
{
// printf ("l_sum[%d]=%d\n",i,l_sum[i]);
if(min_value>l_sum[i])
{
min_value=l_sum[i];
min_col=i;
}
}
for(i=min_col;i>min_col-(int)((12/90.0)*pImgThreshold->height);i--)
{
//printf ("l_sum[%d]=%d\n",i,l_sum[i]);
if(l_sum[i]>3*255)
{
sixright=i;break;
}
}
if(i<=min_col-(int)((12/90.0)*pImgThreshold->height))
{
//printf("hvan not found the fiveright\n");
sixright=sixleft+(int)((51/90.0)*pImgThreshold->height);
}
for(i=min_col;i<min_col+(int)((12/90.0)*pImgThreshold->height);i++)
{
//printf ("l_sum[%d]=%d\n",i,l_sum[i]);
if(l_sum[i]>3*255)
{
sevenleft=i;break;
}
}
if(i>=min_col+(int)((12/90.0)*pImgThreshold->height))
{
printf("hvan not found the sixright\n");
sevenleft=sixleft+(int)((51/90.0)*pImgThreshold->height);
}
printf("the sixright=%d and the sevenleft=%d\n",sixright,sevenleft);
i=sevenleft+(int)((45/90.0)*pImgThreshold->height)+1;
min_value=l_sum[i];
min_col=i;
for(;(i<=sevenleft+(int)((57/90.0)*pImgThreshold->height))&&i<pImgThreshold->width;i++)
{
// printf ("l_sum[%d]=%d\n",i,l_sum[i]);
if(min_value>l_sum[i])
{
min_value=l_sum[i];
min_col=i;
}
}
for(i=min_col;i>min_col-(int)((12/90.0)*pImgThreshold->height);i--)
{
//printf ("l_sum[%d]=%d\n",i,l_sum[i]);
if(l_sum[i]>3*255)
{
sevenright=i;break;
}
}
if(i<=min_col-(int)((12/90.0)*pImgThreshold->height))
{
printf("hvan not found the fiveright\n");
sevenright=sevenleft+(int)((51/90.0)*pImgThreshold->height);
}
if(sevenright>pImgThreshold->width-1){ sevenright=pImgThreshold->width-1;printf("have not found the sevenright\n");}
printf("the sevenrigh=%d\n", sevenright);
cvLine(pImgThreshold,cvPoint(oneleft,0),cvPoint(oneleft,pImgThreshold->height),cvScalar(188,0,0),1,8,0);
cvLine(pImgThreshold,cvPoint(oneright,0),cvPoint(oneright,pImgThreshold->height),cvScalar(188,0,0),1,8,0);
cvLine(pImgThreshold,cvPoint(twoleft,0),cvPoint(twoleft,pImgThreshold->height),cvScalar(255,0,0),1,8,0);
cvLine(pImgThreshold,cvPoint(rig,0),cvPoint(rig,pImgThreshold->height),cvScalar(188,0,0),1,8,0);
cvLine(pImgThreshold,cvPoint(end,0),cvPoint(end,pImgThreshold->height),cvScalar(255,0,0),1,8,0);
cvLine(pImgThreshold,cvPoint(threeright,0),cvPoint(threeright,pImgThreshold->height),cvScalar(188,0,0),1,8,0);
cvLine(pImgThreshold,cvPoint(fourleft,0),cvPoint(fourleft,pImgThreshold->height),cvScalar(255,0,0),1,8,0);
cvLine(pImgThreshold,cvPoint(fourright,0),cvPoint(fourright,pImgThreshold->height),cvScalar(188,0,0),1,8,0);
cvLine(pImgThreshold,cvPoint(fiveleft,0),cvPoint(fiveleft,pImgThreshold->height),cvScalar(255,0,0),1,8,0);
cvLine(pImgThreshold,cvPoint(fiveright,0),cvPoint(fiveright,pImgThreshold->height),cvScalar(188,0,0),1,8,0);
cvLine(pImgThreshold,cvPoint(sixleft,0),cvPoint(sixleft,pImgThreshold->height),cvScalar(255,0,0),1,8,0);
cvLine(pImgThreshold,cvPoint(sixright,0),cvPoint(sixright,pImgThreshold->height),cvScalar(188,0,0),1,8,0);
cvLine(pImgThreshold,cvPoint(sevenleft,0),cvPoint(sevenleft,pImgThreshold->height),cvScalar(255,0,0),1,8,0);
cvLine(pImgThreshold,cvPoint(sevenright,0),cvPoint(sevenright,pImgThreshold->height),cvScalar(188,0,0),1,8,0);
IplImage *pImgCharOne=NULL;//截取字符
IplImage *pImgCharTwo=NULL;
IplImage *pImgCharThree=NULL;
IplImage *pImgCharFour=NULL;
IplImage *pImgCharFive=NULL;
IplImage *pImgCharSix=NULL;
IplImage *pImgCharSeven=NULL;
pImgCharOne=cvCreateImage(cvSize(oneright-oneleft+1,nHeight),IPL_DEPTH_8U,1);
pImgCharTwo=cvCreateImage(cvSize(rig-twoleft+2,nHeight),IPL_DEPTH_8U,1);
pImgCharThree=cvCreateImage(cvSize(threeright-end+2,nHeight),IPL_DEPTH_8U,1);
pImgCharFour=cvCreateImage(cvSize(fourright-fourleft+2,nHeight),IPL_DEPTH_8U,1);
pImgCharFive=cvCreateImage(cvSize(fiveright-fiveleft+2,nHeight),IPL_DEPTH_8U,1);
pImgCharSix=cvCreateImage(cvSize(sixright-sixleft+2,nHeight),IPL_DEPTH_8U,1);
pImgCharSeven=cvCreateImage(cvSize(sevenright-sevenleft+1,nHeight),IPL_DEPTH_8U,1);
CvRect ROI_rect1;
ROI_rect1.x=oneleft;
ROI_rect1.y=0;
ROI_rect1.width=oneright-oneleft+1;
ROI_rect1.height=pImgResize->height;
cvSetImageROI(pImgResize,ROI_rect1);
cvCopy(pImgResize,pImgCharOne,NULL); //获取第1个字符
cvResetImageROI(pImgResize);
ROI_rect1.x=twoleft-1;
ROI_rect1.y=0;
ROI_rect1.width=rig-twoleft+2;
ROI_rect1.height=pImgResize->height;
cvSetImageROI(pImgResize,ROI_rect1);
cvCopy(pImgResize,pImgCharTwo,NULL); //获取第2个字符
cvResetImageROI(pImgResize);
ROI_rect1.x=end-1;
ROI_rect1.y=0;
ROI_rect1.width=threeright-end+2;
ROI_rect1.height=pImgResize->height;
cvSetImageROI(pImgResize,ROI_rect1);
cvCopy(pImgResize,pImgCharThree,NULL); //获取第3个字符
cvResetImageROI(pImgResize);
ROI_rect1.x=fourleft-1;
ROI_rect1.y=0;
ROI_rect1.width=fourright-fourleft+2;
ROI_rect1.height=pImgResize->height;
cvSetImageROI(pImgResize,ROI_rect1);
cvCopy(pImgResize,pImgCharFour,NULL); //获取第4个字符
cvResetImageROI(pImgResize);
ROI_rect1.x=fiveleft-1;
ROI_rect1.y=0;
ROI_rect1.width=fiveright-fiveleft+2;
ROI_rect1.height=pImgResize->height;
cvSetImageROI(pImgResize,ROI_rect1);
cvCopy(pImgResize,pImgCharFive,NULL); //获取第5个字符
cvResetImageROI(pImgResize);
ROI_rect1.x=sixleft-1;
ROI_rect1.y=0;
ROI_rect1.width=sixright-sixleft+2;
ROI_rect1.height=pImgResize->height;
cvSetImageROI(pImgResize,ROI_rect1);
cvCopy(pImgResize,pImgCharSix,NULL); //获取第6个字符
cvResetImageROI(pImgResize);
ROI_rect1.x=sevenleft-1;
ROI_rect1.y=0;
ROI_rect1.width=sevenright-sevenleft+1;
ROI_rect1.height=pImgResize->height;
cvSetImageROI(pImgResize,ROI_rect1);
cvCopy(pImgResize,pImgCharSeven,NULL); //获取第7个字符
cvResetImageROI(pImgResize);
cvNamedWindow("垂直投影",CV_WINDOW_AUTOSIZE);
cvMoveWindow("垂直投影",0,0);
cvShowImage("垂直投影",pImgThreshold);
//cvSaveImage("E:\\new\\23.jpg",pImgThreshold);
cvNamedWindow("one",CV_WINDOW_AUTOSIZE);
cvMoveWindow("one",0,300);
cvShowImage("one",pImgCharOne);
cvNamedWindow("two",1);
cvMoveWindow("two",50,300);
cvShowImage("two",pImgCharTwo);
//cvSaveImage("E:\\library\\0.jpg",pImgCharTwo);
cvNamedWindow("three",1);
cvMoveWindow("three",100,300);
cvShowImage("three",pImgCharThree);
//cvSaveImage("E:\\library\\0.jpg",pImgCharThree);
cvNamedWindow("four",1);
cvMoveWindow("four",150,300);
cvShowImage("four",pImgCharFour);
//cvSaveImage("E:\\library\\17.jpg",pImgCharFour);
cvNamedWindow("five",1);
cvMoveWindow("five",200,300);
cvShowImage("five",pImgCharFive);
//cvSaveImage("E:\\library\\3.jpg",pImgCharFive);
cvNamedWindow("six",1);
cvMoveWindow("six",250,300);
cvShowImage("six",pImgCharSix);
//cvSaveImage("E:\\library\\1.jpg",pImgCharSix);
cvNamedWindow("seven",1);
cvMoveWindow("seven",300,300);
cvShowImage("seven",pImgCharSeven);
//cvSaveImage("E:\\library\\14.jpg",pImgCharSeven);
cvWaitKey();
cvReleaseImage(&pImgThreshold);
cvDestroyWindow("显示高斯滤波后图像");
cvDestroyWindow("one");
cvReleaseImage(&pImgCharOne);
cvDestroyWindow("two");
cvReleaseImage(&pImgCharTwo);
cvDestroyWindow("three");
cvReleaseImage(&pImgCharThree);
cvDestroyWindow("four");
cvReleaseImage(&pImgCharFour);
cvDestroyWindow("five");
cvReleaseImage(&pImgCharFive);
cvDestroyWindow("six");
cvReleaseImage(&pImgCharSix);
cvDestroyWindow("seven");
cvReleaseImage(&pImgCharSeven);
return -1;
}
return 0;
}