这个程序使用OpenCV C++实现简单的车型识别,这一小节识别具体的车型。
形状数据库里有四种,分别是0--小汽车、1--SUV、2--商务车、3--面包车:


输入图片:

按照第一节《OpenCV C++车型识别1-图像预处理-CSDN博客》,把输入图片处理成下面这样:

很明显能看出来这个图片和上面的1.bmp比较像,对应的车型是SUV.
这是CMD里的输出:

代码:
cpp
IplImage *sample[4];
sample[0]=cvLoadImage("0.bmp",0);
sample[1]=cvLoadImage("1.bmp",0);
sample[2]=cvLoadImage("2.bmp",0);
sample[3]=cvLoadImage("3.bmp",0);
CvMemStorage *storage_sample=NULL;
storage_sample=cvCreateMemStorage(0);
cvClearMemStorage(storage_sample);
CvSeq* contours_data[4];
for(int i=0;i<4;i++)
contours_data[i]=0;
for(int i=0;i<4;i++)
cvFindContours(sample[i],storage_sample,&contours_data[i],sizeof(CvContour),CV_RETR_EXTERNAL);
double xiangshidu[4];
memset(xiangshidu,0,sizeof(xiangshidu));
xiangshidu[0]=cvMatchShapes(contour,contours_data[0],2);
for(int i=0;i<4;i++)
{
xiangshidu[i]=cvMatchShapes(contour,contours_data[i],2,0);
}
int BestMatch=0;
double min_xiangshidu=xiangshidu[0];
for(int i=0;i<4;i++)
{
if(xiangshidu[i]<min_xiangshidu)
{
min_xiangshidu=xiangshidu[i];
BestMatch=i;
}
}
switch (BestMatch)
{
case 0:
AfxMessageBox("车型为:小汽车");
break;
case 1:
AfxMessageBox("车型为:SUV");
break;
case 2:
AfxMessageBox("车型为:商务车");
break;
case 3:
AfxMessageBox("车型为:面包车");
break;
default:
AfxMessageBox("识别失败");
break;
}