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;
		}
相关推荐
chuan.bai36 分钟前
Java RAG 实战(第 11 篇):RAG 知识工作台网页
java·开发语言·人工智能
fthux3 小时前
招聘季实测:我用 TraeWork 搭了一套 AI 简历初筛系统
人工智能·ai编程·trae
SLD_Allen4 小时前
NVIDIA KAI Scheduler深度解析——Kubernetes原生AI调度器的架构、原理与实践
人工智能·架构·kubernetes
小玮看世界4 小时前
从“画图”到“Mermaid”:AI语义理解与架构绘制的演进之路
人工智能·深度学习·计算机视觉
小岐AI观4 小时前
智赋岐黄适合养生馆吗?
大数据·人工智能·物联网
YOLO数据集集合4 小时前
煤炭物料检测数据集:基于YOLO26的矿山传送带智能“哨兵”
人工智能·yolo·数据挖掘·煤炭·煤炭检测·矿山传送带·传送带异物
深小乐5 小时前
DeepSeek Harness 强是真的强,普通用户可以再等等
人工智能
wuyk5555 小时前
98.C语言易混难点:字符数组与字符串指针的底层差异
c语言·开发语言·c++·stm32·嵌入式硬件·算法