轉自:http://www.opencv.org.cn/forum/viewtopic.php?f=1&t=9146#p35176
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
如何製作訓練樣本
分析了原作者的資料集,結合網上一些資料,下面描述如何製作訓練樣本
1、如何從原始圖片產生樣本
對比INRIAPerson\INRIAPerson\Train\pos(原始圖片),INRIAPerson\train_64x128_H96\pos(產生樣本)可以發現,作者從原始圖片裁剪出一些站立的人,要求該人不被遮擋,然後對剪裁的圖片left-right reflect。以第一張圖片為例crop001001,它剪裁了2個不被遮擋的人,再加上原照片,共3張,再加左右鏡像,總共6張。
2、裁剪
可利用基於opencv1.0的程式imageclipper,進行裁剪並儲存,它會自動組建檔案名並儲存在同一路徑下新產生的imageclipper檔案夾下。
3.改變圖片大小
可以利用Acdsee軟體,Tools/open in editor,進去後到Resize選項; tools/rotate還可實現left-right reflect
4. 製作pos.lst列表 進入dos介面,定位到需要製作列表的圖片檔案夾下,輸入 dir /b> pos.lst,即可組建檔案列表;
仔細分析了cvhop.cpp中的compute函數,可以直接調用它來獲得樣本HOG,然後訓練得到檢測運算元
1.製作樣本
2.對每一張圖片調用
hog.compute(img, descriptors,Size(8,8), Size(0,0));
可以產生hog descriptors,把它儲存到檔案中
for(int j=0;j<3780;j++)
fprintf(f,"%f,",descriptors[j]);
3.利用SVM進行訓練和分類,可得到權重係數,即getDefaultPeopleDetector()函數中調用的檢測運算元detector[ ]