【OpenCV学习记录】级联分类器训练与测试

1.我的运行环境

(1)Win7 64位

(2)VS2015

(3)Opencv3.4.4

2.准备数据

(1)正样本    

  • 要多
  • 正样本不要求大小相同,只要求长与宽的比值相同
  • 背景尽量少

(2)负样本 

  • 要多
  • 大小没有要求
  • 不能包含正样本

3.生成样本描述文件

(1)正样本描述文件

          尽你所能生成以下格式的正样本描述文件:

          路径  样本中目标数目  目标起始坐标(一般是图像起始点)  目标结束坐标(一般是图像最后一个点)

         

(2)负样本描述文件

          负样本路径

         

 4.生成vec文件

   (1) 打开DOS界面进入opencv安装目录下该位置D:\opencv-3.4.4\opencv\build\x64\vc14\bin

              输入opencv_createsample会出现该可执行文件的参数表

             

(2)输入如下命令生成vec文件 

             

5.样本训练

(1)输入opencv_traincascade会出现该可执行文件的参数表

             

(2)输入如下命令开始训练

             

6.所有准备工作都完成了

           此时,你的文件结构应该是这样的:

           

7.测试

//特征文件
String  fileName_LBP = "img/cascade.xml";
CascadeClassifier cucumber_classifier;

int cascade_c() {
    //分类器
	cucumber_classifier.load(fileName_LBP);
	if (cucumber_classifier.empty()) {
		cout << "no cucumber feature data!"<<endl;
		int a = 0; cin >> a;
		return -1;
	}
    //获取待检测图像
	Mat src = imread("img/test/2.jpg");
	if (src.empty()) {
		cout << "no image!" << endl;
		int a = 0; cin >> a;
		return -1;
	}
	imshow("test", src);
    //处理待检测图像
	Mat gray;
	cvtColor(src, gray, COLOR_BGR2GRAY);
	equalizeHist(gray, gray);
	//检测
	vector<Rect> cucumbers;
	cucumber_classifier.detectMultiScale(src, cucumbers, 1.1, 3, 0, Size(20, 20));
    //显示检测结果
	for (size_t t=0; t < cucumbers.size(); t++) {
		rectangle(src, cucumbers[static_cast<int>(t)], Scalar(0, 0, 255), 2, 8, 0);
	}
	namedWindow("result", CV_WINDOW_AUTOSIZE);
	imshow("result", src);

	waitKey(0);

	return 0;
}

8.完!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值