用opencv训练一个模型用于识别特定物体

您所在的位置:网站首页 opencv识别指定物体 用opencv训练一个模型用于识别特定物体

用opencv训练一个模型用于识别特定物体

2023-10-06 18:38| 来源: 网络整理| 查看: 265

windows 下OpenCV的安装部署详细教程

一、下载OpenCV   到OpenCV官网下载你需要的版本。   点击RELEASES(发布)

图片.png 由于OpenCV支持好多平台,比如Windows, Android, Maemo, FreeBSD, OpenBSD, iOS, Linux和Mac OS,一般初学者都是用windows,所以在这里下载Win pack 图片.png 点击Win pack 后跳出下面界面,等待5s自动下载。 图片.png 下载后是这样的 图片.png 然后双击他,解压,就是大佬们说的安装,实质就是解压一下,解压完出来一个文件夹,其他什么也没发生。你把这个文件夹放在哪都行,不过你要记住他在哪。 图片.png 正在解压 图片.png 解压完打开文件夹是这样的 图片.png 其中build是OpenCV使用时要用到的一些库文件,而sources中则是OpenCV官方为我们提供的一些demo示例源码 二、配置环境变量   把OpenCV文件夹放好地方后,依次选择计算机—>属性—>高级系统设置—>环境变量,找到Path变量,选中并点击编辑,然后新建把你的OpenCV执行文件的路径填进去,然后一路点确定,这样环境变量就配置完了。 图片.png OpenCV执行文件的路径这样找: 找到你解压好的OpenCV文件夹,依次选择build—>x64—>vc15—>bin, 然后是这样的 图片.png 这个路径就是我的OpenCV执行文件的路径,你的应该和我的差不多吧。 这里注意,如果你下载的是OpenCV2.x版本,选择build后,还需要选择x86或x64,然后是vc12(为什么不是vc10或vc11,一般都是选最新的),其他步骤大同小异。

三、部署OpenCV   前面说了,OpenCV是一个SDK,得使用工具开发它,比如Visual Studio(当然有些大佬只用记事本或神一样的Vim),接下来就是在Visual Studio中部署OpenCV了。

安装Visual Studio   因为主题是OpenCV,这个这里不讲了,请自行Google。

打开Visual Studio,新建工程   初学者最好是建一个控制台工程,没有其他问题的干扰。

添加包含目录   依次选择项目—>属性—>VC++目录—>包含目录—>编辑   找到你的包含目录添加就可以了,最好添加三个,我的是这样的:   D:\opencv\build\include   D:\opencv\build\include\opencv   D:\opencv\build\include\opencv2   

图片.png

3.添加库目录   依次选择项目—>属性—>VC++目录—>库目录—>编辑   我的是D:\opencv\build\x64\vc15\lib

图片.png 如果编译报错 image.png 去掉打勾 image.png

4.添加附加依赖项   依次选择项目—>属性—>链接器—>输入—>附加依赖项—>编辑   添加你的库文件名

图片.png

库文件这样找:

图片.png 有两个文件opencv_world341d.lib和opencv_world341.lib   如果配置为Debug,选择opencv_world341d.lib   如果为Release,选择opencv_world341.lib   这里注意,如果你下载的是OpenCV2.x版本,这里的库文件比较多,都填进去就可以了。

到这里OpenCV的所有安装部署就结束了,可以进行下一步的使用和学习了。 参考链接:https://blog.csdn.net/maizousidemao/article/details/81474834

OpenCV Tutorials

https://docs.opencv.org/master/d9/df8/tutorial_root.html

版本3.4.7,4.0版本缺少了一些训练用的exe文件。。

1、 准备正负样本

最好为1:3。

正样本

image.png

最好自己拍,让物体占满整个画面,这样就不用后续去裁剪。Opencv有个opencv_annotations.exe的接口用于标记物体在图像中的位置(如在命令行

opencv_annotations -a=F:\test\Project1\Project1\annotations.txt -i=F:\test\Project1\Project1\fortest

,-a要生成的描述文件,-i负样本路径),不过不好用,因为后续还需要对正样本进行缩小,加快训练速度。缩小后位置就变化了。白做。缩小后再标记不现实,太小了不好标记。 所以最好让物体占满整个画面,就不需要进行标记或裁剪,后面说原因。

如何是要识别固定的物体,比如商标之类的,目标不存在太多变化,可以用一张图片通过各种扭曲生成多个正样本。CD进入图片文件夹中,命令行输入:

opencv_createsamples -vec pos.vec -num 1000 -w 30 -h 30 -bg neg.txt -img C:\obeject_detetion\xsamples\pos_1\0.jpg

-vec 要生成的vec文件 -num要生成的样本数 -w、-h 要生成样本的宽和高 -bg 背景文件的描述文件目录(不能用绝对路径,会出错,把该文件放在正样本同一目录下) -img 使用的一张正样本(用于扭曲生成多个正样本)

负样本

image.png

[图片上传中...(image.png-3cc16c-1577779623303-0)] 负样本比较随意,只需要是与检测场景相关就好。

2、对样本进行预处理 分别对正负样本进行灰度化处理,其中正样本还需要进行缩放处理。如缩小为4040,加快训练进度。灰度化处理可以使检测效果更好,因为检测时读取的每帧图像也都要进行灰度化。 处理后如图所示 正样本

image.png 每张都是4040

负样本

image.png

大小不需要统一 一个对图片进行灰度化和缩放的C++程序,也可以用一些软件来完成,如ACDsee,PS等。

#include #include "opencv2/imgproc.hpp" #include "opencv2/imgcodecs.hpp" #include "opencv2/highgui.hpp" using namespace cv; using namespace std; int main(int argc, char *argv[]) { //const char* filename = argc >= 2 ? argv[1] : "./posresize/1.jpg"; //string strInFileName = parser.get("image"); vector filenames; String folder = "F:\\程序\\obeject_detetion(C)\\xsamples\\pos"; //要处理的图片目录 glob(folder, filenames); cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3