代码地址如下:
http://www.demodashi.com/demo/12966.html

记得把这几点描述好咯:代码实现过程 + 项目文件结构截图 + 演示效果

1.准备工作

1.1 训练集和测试集准备

  1. 先将数据集手动划分成训练集和测试集,并分好类,比如第一类就放在文件夹名为0的文件夹下,第二类就是1,如此类推。

    当前程序只能处理10类以下车标,因为当前程序逻辑不支持10以上的数字识别(具体可以仔细看下代码)

所有训练集的图片放在train文件夹中,测试集放在test文件夹下。最终的文件树如下:

  1. reCarlog是工程名,即Cardatamain.cpp同目录。
  2. 测试集的类别数字和训练集的要一一对应。因为程序将要用它们作为分类依据。
  1. main.cpp目录下准备两个文件,trainpath.txttestpath.txt,用以保存所有训练集和测试集图片的路径。程序需要这两个文件来读取训练集和测试集的图片。举例如下(trainpath.txt)

    ./Cardata/train/0/train_citroen1.jpg
    ./Cardata/train/0/train_citroen10.jpg
    ./Cardata/train/0/train_citroen100.jpg
    ./Cardata/train/0/train_citroen101.jpg

建议使用相对路径。
这样,当我们读取一张图片的时候,可以利用图片的路径名称,通过split调用确定该车标的类别(使用切分字符'/',第4个值即类别(0,1,2,3,4...))

2.实现步骤

2.1 代码概览

代码很简单,就一个main.cpp文件。大致分为以下3块

  • 全局变量:比如整理好的数据集,标签集,HOG特征向量
  • 全局函数:模块划分,使得main函数不显得臃肿。
  • 自定义网络类myNeraulNetwork用于搭建简单BP网络和训练预测

2.2 运行流程

分3步:

  1. 训练集装载
  2. 定义网络+训练网络
  3. 测试网络

2.2.1 训练集装载

全局变量设定:

#define N_SAMPLE 1000
#define F_NUM   1764
#define CLASSNUM 5
float Data[N_SAMPLE][F_NUM];      // 数据存放
float Label[N_SAMPLE][CLASSNUM]   // 标签存放

训练网络输入是两个二维矩阵,第一个矩阵是数据矩阵(第一维是样本个数N_SAMPLE,第二维是每个样本的特征向量是,宽度为F_NUM),第二个矩阵是标签矩阵,对应每个样本,都有一个类别标签,如果是第一类,则它的标签向量为1,0,0,0,0(本例是5维)。
这里主要提一下数据矩阵的第二维是怎么确定的。

每个样本的特征向量即每张图片的HOG特征。HOG特征是一个一维向量。

HOG特征维度确定

对于一张图片,使用一个滑动窗口以一定的步进滑动,分别获取每个窗口的特征值,是一般的人工图像特征提取方式。简单说下HOG特征的提取。
假设一张图片的维度是img_size=64x64,我们使用的滑动窗口大小为block_size=16x16,滑动步进stride=8x8,那么对一个这样的图像,能得到(64-8)/8 x (64-8)/8=7x7=49个窗口,对于每个窗口block,HOG特征细分为胞元cell_size=8x8。于是一个block就有2x2=4个胞元,每个胞元默认有9个特征值,所以在上述参数的情况下,HOG特征的维度为49x4x9=1764,这也是本工程的默认参数。

opencv自带HOG特征提取,img_sizeblock_sizestridecell_size都需要自行设定,因此需要事先计算好特征维度,才能确定数据矩阵第二维的宽度。

装载过程

read trainpath.txt;   // 读取路径文件
for each trainImg in trainpath.txt :getHOG(trainImg)   // 获取HOG特征getLabel according to its path put its hog into Data[][]put its label into Label[][]

2.2.2 定义网络+训练网络

对opencv自带网络类进行了简单的封装,如下:

定义和使用代码里说的很清楚了,这里再提下两个构造函数:
带参数的构造函数使用网络参数文件名作为参数。可以直接使用训练好的网络参数文件直接初始化网络,而不需要initialNN

2.2.3 测试网络

读取测试文件,输入网络,获得输出。

输入为每次一个图片,所以输入的二维矩阵为test[1][F_NUM]myNerualNetwork().predict(img)获得一个预测值,可以跟实际值(分析文件路径名获得)做对比,得到分类正确率。

3.其他注意事项

  • 使用宏定义来进行训练or测试
  • Opencv的安装配置查看教程
  • 还有其他问题可直接私戳

4.运行效果

基于Opencv自带BP网络的车标简易识别

代码地址如下:
http://www.demodashi.com/demo/12966.html

注:本文著作权归作者,由demo大师代发,拒绝转载,转载需要作者授权

基于Opencv自带BP网络的车标简易识别相关推荐

  1. java opencv bp网_基于Opencv自带BP网络的车标简易识别

    记得把这几点描述好咯:代码实现过程 + 项目文件结构截图 + 演示效果 1.准备工作 1.1 训练集和测试集准备 先将数据集手动划分成训练集和测试集,并分好类,比如第一类就放在文件夹名为0的文件夹下, ...

  2. 基于OpenCV自带分类器识别人脸

    基于OpenCV自带分类器识别人脸 在VS2019下要安装适用于桌面的VC++ 2015(2017) v14 00(v14)工具集. 访问网站:https://visualstudio.microso ...

  3. bp 神经网络 优点 不足_【学术论文】基于灰度共生矩阵和BP神经网络的乳腺肿瘤识别...

    摘要 乳腺肿瘤是女性病发率极高的一种肿瘤疾病, 但也是一种可以通过早期确诊.提早治疗来降低病死率的一种疾病.提出灰度共生矩阵结合BP神经网络的方法, 提高乳腺肿瘤的识别率.首先将红外乳腺图像进行预处理 ...

  4. DRIVE视网膜血管分割——基于像素点分割(BP网络和CNN网络)

    文章目录 前言 像素点分割和语义分割 DRIVE数据集 一.BP网络分割 1.数据预处理 2.构建BP网络 3.训练代码 测试代码 二.CNN网络分割 四.遇到的Bug及学习小计 bug1--batc ...

  5. 【项目实战】Python基于OpenCV和卷积神经网络CNN进行车牌号码识别项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 车牌识别系统(Vehicle License Plate Rec ...

  6. 使用AMR9开发板(zedboard)基于opencv读取并处理网络监控相机rtsp视频流

    好久没写博客了,主要是因为这段时间都在忙于重复别人的工作,因此没有什么发博客的必要,即使是发也是重复的东西,实在没有什么益处. 因为课题的需要,最近在研究怎么把网络监控摄像头的数据读到嵌入式开发平台上 ...

  7. 计算机视觉之利用颜色进行肤色检测(基于OpenCV自带库函数)

    概述: 在对待物体做初步检测时,颜色信息非常有用.比如说辅助驾驶程序中的路标检测功能,就要凭借标准路标的颜色快速识别可能是路标信息.另一个例子是肤色检测,检测到的皮肤区域可以作为图像中有人存在的标志. ...

  8. 基于openCV的项目实战1:信用卡数字识别

    目的:识别信用卡卡号: 方法:基于模板匹配: 模板匹配思想:拿4和左边模板进行一一匹配,算一下平方项的差异,恰好4和左边模板中的4差异最小,所以就知道当前的数字是4: 具体步骤: 第一步:找到与你当前 ...

  9. 基于OpenCV读取摄像头进行人脸检测和人脸识别

    前段时间使用OpenCV的库函数实现了人脸检测和人脸识别,笔者的实验环境为VS2010+OpenCV2.4.4,OpenCV的环境配置网上有很多,不再赘述.检测的代码网上很多,记不清楚从哪儿copy的 ...

最新文章

  1. 47万实例数据集,智源联合旷视发布2020 CrowdHuman人体检测大赛
  2. 11.28 软件工程概论psp
  3. VTK修炼之道26:图像基本操作_三维图像切片提取
  4. boost::python模块实现使用任意 Python 序列创建 ndarray 的示例
  5. vue事件总线_[面试] 聊聊你对 Vue.js 框架的理解
  6. 像个字段相减绝对值_张歆艺做家务受伤,袁弘俩字逗乐媳妇,真是幼稚得像个大龄儿童...
  7. android功耗优化(2)--对齐唤醒
  8. 波卡生态跨链隐私中间件协议Raze Network与社区DeFi平台MANTRA DAO达成合作
  9. Hadoop学习记录(6)|Eclipse安装Hadoop 插件
  10. Java vs ECS,垃圾回收的乾坤大挪移?
  11. Kubernetes系列——Kubernetes 组件、对象(二)
  12. 前端技术-HTML5与CSS
  13. 微小宝编辑器修改html代码,怎么在微小宝编辑器提取永久链接
  14. 美化导航html,HTML-美化
  15. 测试音响声音啸叫软件,公共广播专业音响系统啸叫声与电流声排除方法_航天广电软件...
  16. 如何监测微信群关键词并收集转发到指定的群
  17. 产品经理的职责 产品规划 产品设计 推导研发 职责误区
  18. 视频维权新方式 视频内容将靠“DNA”鉴真假
  19. 写给5年前自己的一封信
  20. ubuntu下备份系统以及遇到的问题

热门文章

  1. 完整的FreeBSD软件安装方法
  2. mysql服务器安装时下列说法正确的是_下列说法正确的是:()
  3. 计算机毕业设计之java+javaweb的仓储系统出入库模块设计系统
  4. 成功IPO还是被巨头收购?估值过百亿的独角兽Dropbox将何去何从
  5. Android elevation设置大揭秘
  6. 4800万四摄新机999元起?红米Note8小金刚品质,有哪些优缺点
  7. 简评几款开源RISC-V处理器
  8. 百度、腾讯和阿里巴巴 12大隐藏良心级实用功能
  9. 闲鱼架构专家,详解亿级C2C电商平台,商品体系架构如何搭建?
  10. virtual box 安装oracle linux,Virtual Box下安装Oracle Linux 6.3