如何使用opencv中的adboost算法訓練分類器
需要的工具
- opencv視覺庫
- vs開發環境
步驟
1. 正負樣本的選取
2. 樣本描述文件的創建
使用dos命令和opencv中的createSamples程序創建樣本描述文件
正樣本描述文件的創建
1. 使用命令將當前目錄切換到正樣本圖片的目錄 2. 輸入dir /b > pos.txt,此時目錄中生成一個pos.txt文件,打開pos.txt文件,刪除最後一行保存文件 3. 一個證樣本描述文件需要包含文件名,正樣本在圖片中的數目,位置和大小,具體格式如下faces/00.bmp 1 0 0 20 20。因此,需要打開剛剛生成的pos.txt文件,使用查找替換功能,將‘bmp’替換成‘bmp 1 0 0 20 20’ 4. 因爲在使用opencv中opencv haartraining 程序訓練時輸入的正樣本是vec文件,所以需要使用opencv中的opencv createsample程序生成pos.vec證樣本描述文件 opencv haartraining 程序和opencv createsample程序opencv安裝目錄的bin文件目錄下可以找到,找到後複製到當前目錄下 5. 複製到當前目錄下之後,在dos命令窗口下運行命令‘opencv_createsamples.exe -info pos.txt -vec pos.vec -num 2706 -w 20 -h 20’即可生成pos.vec正樣本描述文件 1. 出現應用程序錯誤:應用程序無法正常啓動(0xc000007b),請單擊“確定”關閉應用程序 原因:x86程序在x64下運行 解決方案:用X64程序運行 2. opencv error:unknown error code -9 <> in cvSetImageROI 原因:找不到圖片 解決方案:將圖片文件夾往上一級目錄提
負樣本描述文件的創建
只需生成neg.txt文件即可,執行2.1.1和2.1.2兩步
訓練分類器
1. 使用命令‘opencv_haartraining.exe -data cascade -vec pos.vec -bg neg.txt -sym -npos 2706 -nneg 4300 -mem 2000 -mode ALL -w 20 -h 20’
1. opencv error:assertion failed <elements_read == 1> in icvGetHaarTraininDataFromVecCallback
原因:每個強分類器訓練過程中都會從剩下的countvec中抽樣,每次訓練完一個強分類器之後,都會從總樣本中剔除,一直進行nstage次,如果npos設置與vec中總樣本數相同時,第二個強分類器訓練時必然會報錯,提示樣本數不足
解決方案:npos與nneg設置小一點即可