// @param img: grayscaled and in RGB format (e.g. loaded from file). void OCRer::process_image(Mat img) { /* if (_motion) { _n_imgs = 0; _motion = false; } if (_n_imgs == 0) { _average_img = img; } else { // detect motion by comparing with _last_img vector<uchar> status; vector<float> err; calcImageDisplacement(_last_img, img, &status, &err); int n = 0; int l = status.size(); for (int i = 0; i < l; i++) { bool matched = (bool) status[i]; if (matched) { n++; } } float fn = (float) n; float fnl = (float) _last_n_features; float p_motion = fabs( (fn - fnl) / fnl ); // "percentage" of motion _last_n_features = n; if (p_motion > MOTION_P_THRESHOLD) _motion = true; else if (_n_imgs < MAX_N_IMGS) { float alpha = 1.0f / (float) (_n_imgs + 1); Mat sum = Mat::zeros(img.size(), CV_32F); // has to be CV_32F or CV_64F accumulate(img, sum); accumulate(_average_img, sum); sum.convertTo(_average_img, _average_img.type(), alpha); } else { return ; } } _last_img = img; _n_imgs++; OCR(_average_img); */ OCR(img); }
int __stdcall MatchCheckCode(char *szPath, char *szCode,int iThreadShod) { try { IplImage *m_Source_Pic = NULL; m_Source_Pic = cvLoadImage(szPath); if (!m_Source_Pic) { strcpy(szCode,"can not open the image"); return -2; //找不到 } IplImage * RedChannel = cvCreateImage( cvGetSize(m_Source_Pic), 8, 1); IplImage * GreenChannel = cvCreateImage( cvGetSize(m_Source_Pic), 8, 1); //IplImage * BlueChannel = cvCreateImage( cvGetSize(m_Source_Pic), 8, 1); //cvSetImageCOI(m_Source_Pic,1); //cvCopy(m_Source_Pic,BlueChannel); //提取蓝色 cvSetImageCOI(m_Source_Pic,2); cvCopy(m_Source_Pic,GreenChannel); //提取绿色 cvSetImageCOI(m_Source_Pic,3); cvCopy(m_Source_Pic,RedChannel); //提取红色 cvAdd(RedChannel,GreenChannel,RedChannel); cvThreshold(RedChannel,RedChannel,iThreadShod,255,CV_THRESH_BINARY); strcat(szPath,"2.bmp"); cvSaveImage(szPath,RedChannel); char *szCodeDll = OCR(szPath,-1); CString strRet = GetRetString(szCodeDll); strcpy(szCode,strRet); cvReleaseImage(&m_Source_Pic); cvReleaseImage(&RedChannel); cvReleaseImage(&GreenChannel); //cvReleaseImage(&BlueChannel); return 0; } catch (...) { strcpy(szCode,"excption"); } return -1; }