2 qq 22703009 qq_22703009 于 2016.02.15 09:35 提问

关于车牌识别的新人问题 5C

本人新手,最近学习车牌识别,我把字符分割后想生成新的文件方便下一步实验,但是生成的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);   

}

2个回答

91program
91program   Ds   Rxr 2016.02.15 10:21

你的文件名的生成规则是什么呢?
分割后,会有多个文件,每个文件应该有一个独立的名称才对,这样对不会出现覆盖的现象。

putaolove
putaolove   2016.02.15 11:10

http://www.codesoso.net/Record/102402_5106_21.html
这里有很大车牌识别,源代码,可以多下载几个看看。

qq_22703009
qq_22703009 谢谢
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!