转载:http://blog.csdn.net/masibuaa/article/details/16104981
进行行人检测的分类器训练时,负样本是从完全不包含人体的图片中随机剪裁出来的,下面程序的目的就是这个:
- #include <iostream>
- #include <fstream>
- #include <stdlib.h> //srand()和rand()函数
- #include <time.h> //time()函数
- #include <opencv2/core/core.hpp>
- #include <opencv2/highgui/highgui.hpp>
- #include <opencv2/imgproc/imgproc.hpp>
- #include <opencv2/objdetect/objdetect.hpp>
- #include <opencv2/ml/ml.hpp>
-
- using namespace std;
- using namespace cv;
-
- int CropImageCount = 0;
-
- int main()
- {
- Mat src;
- string ImgName;
- char saveName[256];
- ifstream fin("INRIANegativeImageList.txt");
-
-
-
- while(getline(fin,ImgName))
- {
- cout<<"处理:"<<ImgName<<endl;
- ImgName = "D:\\DataSet\\INRIAPerson\\INRIAPerson\\Train\\neg\\" + ImgName;
- src = imread(ImgName);
-
-
-
- if(src.cols >= 64 && src.rows >= 128)
- {
- srand(time(NULL));
-
-
- for(int i=0; i<10; i++)
- {
- int x = ( rand() % (src.cols-64) );
- int y = ( rand() % (src.rows-128) );
-
- Mat imgROI = src(Rect(x,y,64,128));
- sprintf(saveName,"noperson%06d.jpg",++CropImageCount);
- imwrite(saveName, imgROI);
- }
- }
- }
-
- system("pause");
- }
源码下载,环境为VS2010 + OpenCV2.4.4
http://download.csdn.net/detail/masikkk/6547869
参考
从完全不包含人体的图片中随机剪裁出用于人体检测的负样本