本人新手,最近学习车牌识别,我把字符分割后想生成新的文件方便下一步实验,但是生成的roi是在循环里进行的,保存的文件名会被覆盖,不知道如何处理。望指教。
下面是我字符分割的代码
IplImage*img3=cvCreateImage(cvGetSize(img0), img0->depth,0);
IplImage*img4=cvCreateImage(cvGetSize(img0), IPL_DEPTH_8U,0);
cvThreshold( img2, img3, 210, 255, CV_THRESH_BINARY );//二值化
IplConvKernel * myModel2;
myModel2=cvCreateStructuringElementEx( 3,5,1,2,CV_SHAPE_RECT ); //自定义矩形模板
cvDilate(img3,img4,myModel2,1);//膨胀
CvMemStorage* storage1 = cvCreateMemStorage (0);
CvSeq* contour1 = 0;
FillInternalContours(img4,190); ////////////轮廓填充
cvFindContours (img4, storage1, &contour1, sizeof(CvContour), CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE);
double maxarea1=50;
int idx = 0;
char szName[56] = {0};
for (; contour1 != 0; contour1 = contour1->h_next)
{
double tmparea1=fabs(cvContourArea(contour1));
if(tmparea1 < maxarea1)
{
cvSeqRemove(contour1,0); //删除面积小于设定值的轮廓
continue;
}
CvRect rect1 = cvBoundingRect( contour1, 0 );
////////////////////////切割
// cvRectangle( img2, cvPoint( rect1.x, rect1.y ),cvPoint( rect1.x + rect1.width, rect1.y + rect1.height ), cvScalar(0,255,0), 0 );
IplImage* imgNo = cvCreateImage(cvSize(rect1.width,rect1.height), IPL_DEPTH_8U, 1);
cvSetImageROI(img3, rect1);
cvCopyImage(img3, imgNo);
cvResetImageROI(img3);
sprintf(szName, "wnd_%d", idx++);
cvNamedWindow(szName,CV_WINDOW_AUTOSIZE);
cvShowImage(szName, imgNo);
cvReleaseImage(&imgNo);
}