欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

SVM+HOG:从完全不包含人体的图片中随机剪裁出64*128大小的用于人体检测的负样本

发布时间:2025/3/21 57 豆豆
生活随笔 收集整理的这篇文章主要介绍了 SVM+HOG:从完全不包含人体的图片中随机剪裁出64*128大小的用于人体检测的负样本 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

进行行人检测的分类器训练时,负样本是从完全不包含人体的图片中随机剪裁出来的,下面程序的目的就是这个:1张负样本图片生成10张

准备工作:创建负样本描述文件(全路径)ifstream fin("F:\\INRIAPerson\\INRIAPerson\\train_64x128_H96\\neg\\negatives.txt");//打开原始负样本图片文件的路径 sprintf(saveName,"F:\\dataset\\neg\\neg%06d.jpg",++CropImageCount);//生成裁剪出的负样本图片的文件名 #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("F:\\INRIAPerson\\INRIAPerson\\train_64x128_H96\\neg\\negatives.txt");//打开原始负样本图片文件的路径 //注:negatives.txt是负样本描述文件,dir /b/s>negatives.txt,用全路径//一行一行读取负样本描述文件存到ImgName中 while(getline(fin,ImgName)) { cout<<"处理:"<<ImgName<<endl; src = imread(ImgName);//读取图片 //图片大小应该能能至少包含一个64*128的窗口 if(src.cols >= 64 && src.rows >= 128) { srand(time(NULL));//设置随机数种子 //从每张图片中随机裁剪10个64*128大小的不包含人的负样本 for(int i=0; i<10; i++) { int x = ( rand() % (src.cols-64) ); //左上角x坐标 int y = ( rand() % (src.rows-128) ); //左上角y坐标 //cout<<x<<","<<y<<endl; Mat imgROI = src(Rect(x,y,64,128)); sprintf(saveName,"F:\\dataset\\neg\\neg%06d.jpg",++CropImageCount);//生成裁剪出的负样本图片的文件名 imwrite(saveName, imgROI);//保存文件 } } } system("pause"); } 《新程序员》:云原生和全面数字化实践50位技术专家共同创作,文字、视频、音频交互阅读

总结

以上是生活随笔为你收集整理的SVM+HOG:从完全不包含人体的图片中随机剪裁出64*128大小的用于人体检测的负样本的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。