1 首先準備好正樣本:(這裡我們訓練的頭部分類器)
2 將正樣本統一到固定尺寸
這裡我使用python實現,python讀取資料夾還沒有用過,直接先手動操作:
開啟命令列,進入正樣本資料夾中,輸入:
dir /b >pos.txt
這樣就在正樣本資料夾中生成了pos.txt,記錄了所有的檔名:
直接在ue中開啟,切換到16進製制模式,選擇替換,將0d 0a替換為2c 0d 0a
儲存後修改檔名為:pos.csv
這樣就得到了個csv檔案,儲存了所有檔案的名稱(感覺有點蠢,第一次先這樣吧)。
開始寫**,**很簡單,就是讀取csv檔案,開啟影象,灰度化,統一尺寸到32*32,儲存檔案
#coding=utf-8
import pandas as pd
import numpy
from numpy import nan
import cv2
test = pd.read_csv('pos.csv',index_col=false,header=none)#讀取csv檔案
test.columns = ['dir']#修改列名稱
print(test.head(5))#看看資料情況
num = test.shape[0]#取出個數
print(num)
for i in range(0,num):
#讀取檔案
print(i)
#print(test.dir[i])
image = cv2.imread(test.dir[i])
if image is
none:
test.dir[i] = nan#設定為空
continue
image = cv2.resize(image,(30,30))
image = cv2.cvtcolor(image,cv2.color_rgb2gray)
cv2.imwrite(test.dir[i],image)
test.dropna(axis=0,how='any')#去除調na行
test=test.dropna()
print(test.shape[0])
test.to_csv('pos.csv',index=false,header=false)
print("ok end")
3 生成正樣本描述檔案
還記得剛才的pos.txt吧,直接開啟,將jpg都替換為jpg 1 0 0 30 30
記得檢查一下,必須全部都是jpg檔案,別弄錯了。
4 生成負樣本描述檔案
命令列進入負樣本目錄,直接輸入:
dir /b > neg
.txt
opencv_createsamples.exe -vec pos.vec -info pos\pos.txt -bg neg\neg
.txt -w 30 -h 30 -num 3000
這就生成了pos.vec檔案
6 開始訓練:
opencv_traincascade.exe -data data -vec pos.vec -bg neg/neg.txt -numpos 3000 -numneg 5000 -numstages 4 -featuretype haar -w 30 -h 30 -mode all
結果發生錯誤:
經過了長時間的撲騰,最終發現,是負樣本的neg.txt必須包含相對路徑,使用ue開啟,直接列模式編輯新增,終於可以了。
(後面測試opencv2.4.9版本貌似沒有這個路徑的問題)
(順便吐槽下,harr特徵的訓練實在太慢了,建議測試時候先使用hog或者lbp特徵確定步驟是否正確)
opencv的使用例子
include include using namespace std int main 影象相似度orb演算法 define crt secure no deprecate include include include include include include include includ...
opencv庫的使用
coding utf 8 import cv2 as cv import numpy as np from matplotlib.font manager import fontproperties font set fontproperties fname r c windows fonts si...
openCV使用隨記
cv2.videocapture cv2.calcopticalflowfarneback cv2.calcopticalflowfarneback prev,next,flow,pyr scale,levels,winsize,iterations,poly n,poly sigma,flags ...