C++ OpenCV SVM实战Kindle检测(二)----目标检测

点击蓝字关注我们

前一篇文章《C++ OpenCV SVM实战Kindle检测(一)----训练数据》我们除了介绍了一下SVM,并且做了对Kindle的图片进行了数据的训练,生成了模型文件,这一篇我们就主要来看看怎么识别预测。

按照惯例,我们再放一个检测的视频。

视频演示效果

代码实现

01

新建SVM识别项目

C++ OpenCV SVM实战Kindle检测(二)----目标检测_第1张图片

我们新建一个opencv-svm的项目,然后在源文件中新建一个svmpredict.cpp文件,OpenCV的配置还是参考《VS2017配置OpenCV通用属性》。

02

定义参数

C++ OpenCV SVM实战Kindle检测(二)----目标检测_第2张图片

程序开始时,我们加入了训练文件的定义位置,还有在opencv-svmtrain项目中的那个hog_deal的方法,这个方法在上一篇《》有介绍,这里就不再详细说明。

03

目标检测

★ 检测流程 ★

01

加载训练文件

02

加载视频文件

03

视频中每一帧的读取

04

当前帧的目标检测识别

1.加载训练文件

//加载训练文件
cv::Ptr svm = cv::ml::SVM::load(trainfile);

2、3.加视频文件读取每一帧

C++ OpenCV SVM实战Kindle检测(二)----目标检测_第3张图片

上面的红框是读取视频文件,然后下面红框while开始就是代表每一帧的读取。

3.当前帧目标检测

我们上一篇介绍hog的时候,默认生成的winRect的Size就是64*128的,一般网上介绍的图像检测也是从当前帧的图像开始第一个块(block)进行平移的检测,最初用了这个方法,检测时间有点长,如果说单张图片检测还可以容忍,但是在视频中就不行了,太卡,所以这里我们换了一个思路进行检测。

划重点

目标检测

为了能够在视频中进行检测,所以我们直接就在先当前图中寻找轮廓,再根据我们自己的定义判断,排除了不太可能的轮廓最后进行识别,这样明显速度快了很多,像开头视频效果那样,并不卡。

★ 检测流程 ★

01

缩放图像

02

高斯模糊

03

转为灰度图

04

二值化图像

05

形态学闭操作

06

寻找轮廓

07

排除不可能轮廓

08

SVM检测

C++ OpenCV SVM实战Kindle检测(二)----目标检测_第4张图片

图像的预处理:高斯模糊,灰度、二值化,闭操作。

C++ OpenCV SVM实战Kindle检测(二)----目标检测_第5张图片

寻找轮廓:以前的findContours中没怎么介绍hierarchy,这里上面红框说明应该挺清楚了,下面的红框可以屏蔽后看看视频2的效果,应该就知道为什么要加上这个了,推荐大家下了DEMO后自己试试。

C++ OpenCV SVM实战Kindle检测(二)----目标检测_第6张图片

排除不可能的轮廓:这里面我自己定义的是宽高不能小于图像的5分之1,这里也可以自己调试看看。

C++ OpenCV SVM实战Kindle检测(二)----目标检测_第7张图片

目标检测:开始还是用了hog_deal进行了预处理,下面的目标识别很简单的,就一个

//进行svm的预测

float result = svm->predict(one_row);

当结果大于0就说明匹配了,我们再用红色画个矩形框即可。

视频中截图

C++ OpenCV SVM实战Kindle检测(二)----目标检测_第8张图片

C++ OpenCV SVM实战Kindle检测(二)----目标检测_第9张图片

Demo源码地址:

https://github.com/Vaccae/OpenCVSVMDemo.git

-END-

Vaccae的往期经典

OpenCV

《C++ OpenCV案例实战---卡号获取》

《C++ OpenCV案例实战---卡片截取(附代码)》

《C++ OpenCV透视变换---切换手机正面图片》

《C++ OpenCV实战---获取数量》

《C++ OpenCV实战---利用颜色分割获取数量》

《OpenCV4Android NDK方式进行Canny边缘检测》

《OpenCV4Android NDK方式TesserartOCR实时进行识别》

《OpenCV4Android NDK级联方式实时进行人脸检测》

《OpenCV4Android NDK稠密光流调用》

《OpenCV4Android NDK背景消除建模(新Demo附源码)》

Android

《Android利用SurfaceView结合科大讯飞修改语音实别UI》

《Android关于语音识别的功能实现分析(一)---结构化思维》

《Android关于语音识别的功能实现分析(二)---语义解析》

《Android根据类生成签名字符串》

《Android碎片化布局fragment的实战应用》

《Android中RecyclerView嵌套RecyclerView》

《Android里用AsyncTask后的接口回调》

.Net C#

《C#自定义特性(Attribute)讲解与实际应用》

《C#根据类生成签名字符串(附DEMO下载地址)》

《C++创建动态库C#调用》

《C#与三菱PLC(型号FX2N)串口通讯类》

《C#开源跨平台机器学习框架ML.NET----二元分类情绪分析》

《C#开源跨平台机器学习框架ML.NET----结合SqlSugar进行多类分类》

数据库及其它

《Oracel存储过程写报表实战》

《Delphi轮播视频和图片程序(用于双屏显示程序)》

《SQL随机增加销售数据的脚本编写(附脚本下载地址)》

《SQL Server中With As的介绍与应用(三)--递归的实战应用》

《Oracle通过ODBC连接SQL Server数据库》

《Oracle利用row_number()over()方式解决插入数据时重复键的问题》

 

请扫码

给个关注

C++ OpenCV SVM实战Kindle检测(二)----目标检测_第10张图片

微卡智享

你可能感兴趣的:(计算机视觉,编程语言,人工智能,android,图像识别)