用opencv训练一个模型用于识别特定物体 |
您所在的位置:网站首页 › opencv识别指定物体 › 用opencv训练一个模型用于识别特定物体 |
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 图片.png3.添加库目录 依次选择项目—>属性—>VC++目录—>库目录—>编辑 我的是D:\opencv\build\x64\vc15\lib 图片.png 如果编译报错 image.png 去掉打勾 image.png4.添加附加依赖项 依次选择项目—>属性—>链接器—>输入—>附加依赖项—>编辑 添加你的库文件名 图片.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 |