对于opencv训练器的问题

1 .
首先 可以先准备正负样本的图片 正样本最好是截图好的 也就是你要检测的物体充满整个画面 然后尽量图片类型相同吧 不相同好像挺麻烦的 我自己也没有试过 负样本的图片则可以是随便的图片 但是里面不要包括正样本要检测的物体 其他的随便都行 负样本和正样本尽量多吧 这样检测的准确率高 但是好像太多的话 训练的时候会花特别久 我大概是正样本96 负样本380
对于正负样本还得做灰度化处理 可以通过一个c++程序来对进行处理 同时正样本要进行缩放处理 这样可以 加快后期的训练速度
其中灰度化和缩放处理的代码如下

#include <iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;

int main(int argc, char* argv[])
{
	//const char* filename = argc >= 2 ? argv[1] : "./posresize/1.jpg";
	//string strInFileName = parser.get<String>("image");
	vector<String> filenames;
	String folder = "./123/neg_1"; 
	glob(folder, filenames);
	cout << filenames.size() << endl;
	for (size_t i = 0; i < filenames.size(); ++i)
	{
		//cout << filenames[i] << endl;
		string str = filenames[i].substr(folder.length() - 1);
		//cout << str<< endl;
		Mat src = imread(filenames[i], IMREAD_COLOR);

		if (src.empty())
		{
			printf(" Error opening image\n");
			cout << filenames[i] << endl; //printf(" Usage:\n %s [image_name-- default lena.jpg] \n", argv[0]);
			return EXIT_FAILURE;
		}

		Mat gray;
		cvtColor(src, gray, COLOR_BGR2GRAY);
		resize(gray, gray, Size(30, 30), 0, 0, INTER_LINEAR);
		imwrite("./123/neg/" + to_string(i) + ".jpg", gray);



	}


	return 0;
}

这是文件夹的相对路径 也就是放在代码那个文件夹一起
所以这样便可以得到灰度化和缩小大小后的正负样本
2.
生成正负样本描述文件 通过电脑搜索CMD(命令提示符)然后 输入命令行 CD 再去进入到正负样本所在的路径
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在命令行cd分别输入正负样本的路径 并分别执行这两个代码 dir /b/s/p/w *.jpg > neg.txt,dir /b/s/p/w .jpg > pos.txt
得到pos.txt 和neg.txt文件 对正样本文件进行修改替换 将jpg 替换成你之前在代码上改的尺寸 比如我的是30 * 30 那么则改为 jpg 1 0 0 30 30
(也就是在每一行最后加上 1 0 0 30 30(1物体,x,y,w宽,h高)因为整个画面都是物体,只有一个物体,而且每一张大小都是30
30,所以是1 0 0 30 30。如图)在这里插入图片描述
如图 则替换完毕 保存文件 负样本不需要做任何的修改
3 生成正样本的vec文件(这个时候把opencv中的一些exe文件和pos.txt neg.txt 文件均放到一个文件夹里)
在命令行cd下进入正样本的目录后 输入 opencv_createsamples -info pos.txt -vec pos.vec -num 195 -w 30 -h 30(-info 正样本描述文件,-vec 要生成的vec文件,-num要生成的正样本数, -w生成样本的宽,-h生成样本的高)如下图
在这里插入图片描述
5 开始训练训练器
经过以上的步骤 会生成以下三个文件 pos.txt pos.vec neg.txt 这三个文件和opencv中的一些文件放一起 再新建一个xml文件 用来存储训练好的阶层数
然后进入你放好的这些文件的路径中 再输入 opencv_traincascade.exe -data xml -vec pos.vec -bg neg.txt -numPos 195 -numNeg 500 -numStages 10 -w 30 -h 30 -maxFalseAlarmRate 0.2 -precalcValBufSize 1024 -precalcIdxBufSize 1024 -mode ALL 等待训练完成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值