/* 程序名:Cjbsb.c 功能:读入图像文件,甄别图像的角标 参数设置: img 大图 imgjbsb 角标图像头 jbwhite 未知参数1 jbblack 未知参数2 【返回文字的笔迹部分】 注意:这个方法不行,另外一个号的方法:取一个方块,移动方块,确定方块中的样子,如果有横线或者数显就确定为脚标 */ #include #include #include #include #include using namespace std; IplImage* Cjbsb(IplImage* img,IplImage* imgjbsb,int jbwhite,int jbblack){ /*定义变量*/ int i,j,ii,jj,sumjb1,sumjb2,jbi=0,jbj=0; int height,width,step,channels; uchar *data; int brklab=0; //1、 获取图像信息 height = img->height; width = img->width; step = img->widthStep; channels = img->nChannels; data = (uchar *)img->imageData; //IplImage* imgjbsb = cvCreateImage(cvGetSize(img),img->depth,img->nChannels); cvCopy(img,imgjbsb,NULL); uchar *imgjbsbdata= (uchar *)imgjbsb->imageData; //----------------------------------------// //2、找脚标的位置 //----------------------------------------// for(i=0;i=200) sumjb2=sumjb2+imgjbsbdata[ii*step+jj*channels]; } if(sumjb2>=255*(100-jbblack)){ //允许角标内黑点数,第二次提取 jbi=i;//脚标位置 jbj=j; for(ii=i-2;iidepth,img->nChannels); uchar *imgjbcjdata= (uchar *)imgjbcj->imageData; int jbcjstep = imgjbcj->widthStep; int jbcjchannels = imgjbcj->nChannels; for(i=0;i<476;i++){ for(j=0;j<833;j++){ imgjbcjdata[i*jbcjstep+j*jbcjchannels]=data[(i+jbi)*step+(j+jbj)*channels]; } } //此处是yss进行注释,没发现有什么用处 for(i=0;i<476;i=i+2){ imgjbsbdata[(i+jbi)*step+jbj*channels]=0; imgjbsbdata[(i+jbi)*step+(jbj+833)*channels]=0; } for(j=0;j<833;j=j+2){ imgjbsbdata[jbi*step+(j+jbj)*channels]=0; imgjbsbdata[(jbi+476)*step+(j+jbj)*channels]=0; } return imgjbcj; }