【opencv】车辆检测1——样本剪裁

车辆检测需要分为三个部分:

1.样本准备

2.训练样本

3.检测

本文先做第一部分。学习了多篇博客,分为两步骤:

1.需将图片格式转换为bmp,这个使用网上的图片转换器即可;

2.需将正样本图片的大小归一化,如20*20的格式。这里注意有些图片转换器可以设置尺寸,但是我下的直接就是剪裁成20*20,就是原图片的一部分!!后面训练出来的分类器就有问题!所以就打算用编程方法来归一化。

考虑:用opencv遍历文件夹下的所有图片,并且用resize函数重新设置图片尺寸

#include 
#include 
#include 

#include 
#include 
#include  
#include  

using namespace std;
using namespace cv;
void dir(string path)
{
	long hFile = 0;
	struct _finddata_t fileInfo;
	string pathName, exdName;
	Mat src;
	Mat dst;
	String fullPath;
	String savePath;
	String sPath="F:\\data\\pos\\";
	int i=0;
	// \\* 代表要遍历所有的类型
	if ((hFile = _findfirst(pathName.assign(path).append("\\*").c_str(), &fileInfo)) == -1) 
	{
		return;
	}
	do 
	{
	  //判断文件的属性是文件夹还是文件
	  cout << fileInfo.name << (fileInfo.attrib&_A_SUBDIR? "[folder]":"[file]") << endl;
	  fullPath=path+'\\'+(string)fileInfo.name;//读取图片的路径
	  savePath=sPath+(string)fileInfo.name;
	  if(fileInfo.attrib&_A_SUBDIR)
	  {
		
	  }
	  else
	  {
		src=imread(fullPath);
		//imshow("src",src);
		resize(src,dst,Size(20,20),(0,0),(0,0),cv::INTER_LINEAR);
		imwrite(savePath,dst);
	  }

	} while (_findnext(hFile, &fileInfo) == 0);
	_findclose(hFile);
	return;
}

int main()
{
	 //要遍历的目录
	 string path="F:\\data\\pos_data";
	 dir(path);
	 system("pause");
	 return 0;
}
参考:1. opencv 遍历文件夹里面图像--实现

http://blog.csdn.net/tianzhaixing2013/article/details/20307587

2.windows下使用C/C++怎么遍历目录并读取目录下的文件列表

https://zhidao.baidu.com/question/1798637132504240907.html
3. OpenCV入门 - 调整图片尺寸

http://blog.csdn.net/vonzhoufz/article/details/45671249


你可能感兴趣的:(【opencv】车辆检测1——样本剪裁)