还非得输入长度30-10000的问题描述。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
opencv中的一段代码,希望有人可以解释下。
就是从垂直投影开始的代码处 没有看懂,好几个循环, 希望大牛可以帮忙解释下,刚接触OPENCV不久。
难道代码没有 传上来 吗
opencv中的一段代码,希望有人可以解释下
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答
- qq_29629287 2015-07-15 07:05关注
```#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; }
解决 无用评论 打赏 举报
悬赏问题
- ¥15 安装svn网络有问题怎么办
- ¥15 Python爬取指定微博话题下的内容,保存为txt
- ¥15 vue2登录调用后端接口如何实现
- ¥65 永磁型步进电机PID算法
- ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
- ¥88 找成都本地经验丰富懂小程序开发的技术大咖
- ¥15 如何处理复杂数据表格的除法运算
- ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
- ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
- ¥15 latex怎么处理论文引理引用参考文献