您的位置: 主页 > 新闻中心 > 公司资讯

全国服务热线

020-88888888

C++/OpenCV实现图像目标识别与分类

作者:佚名时间:2024-11-26 14:37 次浏览

信息摘要:

这次分享的为一个很理想的情况下的目标识别与分类,对象为螺丝、螺帽、圆环这三个东西,其实就是图一乐呵,为什么说理想化呢?看一下本文使用的实验图片。可以看到,图像中三个目标非常清楚,因为该图背景非常单一,这张图为在我床单上拍的。最近也还在补充图像处理相关的数学基础理论,要达到能在复杂背景下的目标检测...

这次分享的为一个很理想的情况下的目标识别与分类,对象为螺丝、螺帽、圆环这三个东西,其实就是图一乐呵,为什么说理想化呢?看一下本文使用的实验图片。
在这里插入图片描述
可以看到,图像中三个目标非常清楚,因为该图背景非常单一,这张图为在我床单上拍的。最近也还在补充图像处理相关的数学基础理论,要达到能在复杂背景下的目标检测与识别,需要学习的地方还很多。

  1. 图像预处理,包括去噪、去除背景、阈值化
  2. 图像分割
  3. 特征提取
  4. 机器分类学习

下面根据该顺序具体介绍相关代码以及效果。

1.图像预处理

首先是去除噪声,本文使用高斯滤波去噪。然后是去除背景,在这一步骤由于图像是理性化环境下拍摄的,所以特别好处理,只需要用大核卷积模糊图像来而得到背景图,然后使用图片与背景图进行差分,就可以达到背景去除的目的。最后是阈值化,选取阈值将图像变为二值图像,便于图像分割。

 

以上为预处理阶段需要的子函数,在预处理函数中将两个函数调用

 

在目标检测函数中调用,结果如下所示(第一幅图为灰度图像,第二幅图为通过图像模糊得到的背景图,第三幅图为通过背景图将灰度图像背景之后的结果图。得到结果图后阈值化,得到第四幅图):
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

2.图像分割

本文中采用连通组件算法进行图像分割。因为上述操作已经将图像转为二值图像,采用八个或者四个连接像素来标记图像。如果两个像素具有相同的值并且是邻居,则把他们连接起来。得到一个个对象就是识别出来的结果,下面是图像识别函数

 

在这里插入图片描述

3.特征提取

以上两步检测出图像中的独立目标,而要想识别出目标是什么类型的物品,本文采用机器学习的方法对其进行分类识别。
在进行机器学习之前首先要确定要识别的类型物品的特征。本文要识别的物品为螺丝、螺母、圆环,通过观察,我选择提取这三个得目标为纵横比以及面积,代码如下:

 

以上代码为获得每个目标的特征提取。而要训练模型也需要读取存放训练图像的文件夹中的训练集来提取特征,代码如下:

 

4.图像类型识别

有了特征集之后,就要训练模型,并通过训练得出得的模型对图片进行预测。

 

以上为对训练模型的结果进行检验,并且将样本的特征空间图画出,因为只有两个特征,可以绘制平面图表示。

 

预测结果如图所示:
在这里插入图片描述在这里插入图片描述
可以看到,三个目标中,有一个未识别错误,模型并不是达到很好的效果。

平台注册入口