OpenCV C++车型识别2-形状匹配

这个程序使用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;
		}
相关推荐
小艾.pino18 分钟前
MiniMax M3顶住新一代多模态大模型的架构与实战
人工智能·架构
DO_Community23 分钟前
GPT 6 Astra 已上线 DigitalOcean AI 推理云:AGI 时代的计算机操作模型来了
人工智能·gpt·agi
字节跳动视频云技术团队31 分钟前
火山引擎 AI MediaKit X 懂车帝,探索汽车内容智能创作新方式
人工智能·音视频开发
MindUp36 分钟前
大模型技术在股票分析场景的应用与工具调研
人工智能·金融
tuanxiang38 分钟前
在线AI检测接口误判问题排查与绕过实践
人工智能
suaizai_1 小时前
AI进化:从“回答问题”到“完成任务”
人工智能
广凌股份(广凌科技)1 小时前
2026年高校采购管理系统选型指南 | 5款软件深度测评
大数据·人工智能
加密社1 小时前
GPT-6 Astra 100 Studies | 100个AI生成的HTML5视觉作品集
人工智能·gpt
MindUp1 小时前
AI大模型办公自动化工具的技术选型与多维度评估实践
人工智能
黎阳之光1 小时前
数字孪生赋能全域水网,实现水资源管控与节水降碳双向提升
人工智能·物联网·算法·安全·数字孪生