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;
		}
相关推荐
爱敲代码的小黄36 分钟前
神经网络入门指南:从 CNN、RNN 到 Attention
人工智能·面试·程序员
一只爱撸猫的程序猿1 小时前
我看着一个 AI 引擎在 14 天里,从"记忆"走进了"搜索"
人工智能·后端·架构
我登哥MVP2 小时前
DeepSeek-Harness-Super-Agent-学习笔记
人工智能·深度学习·神经网络·机器学习·自然语言处理·agent
LucianaiB2 小时前
【元宝搜索开发者征文大赛】AI时代,学得慢就不用学?用元宝搜索打造一个教程保质期,确保每一个教程符合你的现状
前端·人工智能·ai编程
apcipot_rain2 小时前
C++转Java日记(03)
java·开发语言·c++
布莱克6052 小时前
C++ 中 map 的 insert 与 emplace:key 已存在时会覆盖吗?
开发语言·数据结构·c++·算法·map
xys_6783 小时前
深挖C++:类和对象(中)
开发语言·c++
冬奇Lab4 小时前
一天一个开源项目(第256篇):Anatomy —— 让 Claude 为技术概念「发明一台机器」,画成可交互的等距插画
人工智能·开源
孟郎郎4 小时前
打造一切(Craft Anything)——克隆构造世间万物
人工智能·ai·github·软件构建·开源软件
Martina_03214 小时前
AI生成3D场景的霓虹灯一开就糊成光团?用6步检查Emissive、Bloom与曝光
人工智能·3d·ai·自然语言处理·游戏引擎·材质·贴图