首先利用opencv自帶的訓練檔案haarcascade_frontalface_alt.xml和haarcascade_eye.xml檢測人臉及人眼,其次初步嘗試如何利用opencv訓練資料以及獲得訓練檔案(.xml).
void detectmultiscale(**:const mat& image,
cv_out vector& objects,
double scalefactor = 1.1,
int minneighbors = 3,
int flags = 0,
size minsize = size(),
size maxsize = size()
); 引數1:待檢測,一般為灰度影象加快檢測速度;
引數2:檢測結果容器;
引數3:表示在前後兩次相繼的掃瞄中,搜尋視窗的比例係數。預設為1.1即每次搜尋視窗依次擴大10%;
引數4:表示構成檢測目標的相鄰矩形的最小個數(預設為3個)。
引數5:flag預設值,可用預設值,也可設定cv_haar_do_canny_pruning,那麼函式將會使用canny邊緣檢測來排除邊緣過多或過少的區域。
引數6、7:minsize和maxsize用來限制得到的目標區域的範圍。
#include
#include
#include
#include
using
namespace cv;
using
namespace
std;
string face_cascade_name = "e:\\myopencv\\install\\etc\\haarcascades\\haarcascade_frontalface_alt.xml";
//string face_cascade_name = "f:\\opencv3.0.1\\standard project\\createxml\\create\\xml\\cascade.xml";
//使用自己的訓練資料效果不好
string eye_cascade_name = "e:\\myopencv\\install\\etc\\haarcascades\\haarcascade_eye.xml";
int main()
if (!eye_cascade.load(eye_cascade_name))
cvtcolor(img,gray,cv_bgr2gray);
equalizehist(gray,gray);
vector
faces;
face_cascade.detectmultiscale(gray,faces, 1.1, 2, 0 | cv_haar_scale_image, size(30, 30));
for (int i =0; i < faces.size(); i++)
}imshow("facedect",img);
waitkey(0);
return
0;}
結果
具體步驟參見部落格:採用opencv_cascadetrain進行訓練的步驟及注意事項
1. 準備正負樣本
2. 生成vec檔案
3. 利用opencv_cascadetrain.exe進行訓練
注意點:負樣本數目要比正樣本數目多,而且負樣本數量不能太少
從命令視窗進入opencv_cascadetrain.exe,
引數設定:
正樣本數量為100,負樣本數量為50的具體引數
opencv_traincascade.exe -data xml -vec pos.vec -bg neg.txt -numpos 104.訓練好後把生成的cascade.xml替換上述程式中的opencv自帶的xml檔案-numneg 50 -numstages 16 -precalcvalbufsize 200 -precalcdxbufsize 1000 -featuretype lbp
結果:
效果不理想,正負樣本的選擇以及訓練不到位。
OpenCV OpenCV中GPU模組使用
cuda基本使用方法 在介紹opencv中gpu模組使用之前,先回顧下cuda的一般使用方法,其基本步驟如下 1.主機 執行 2.傳輸資料到gpu 3.確定grid,block大小 4.呼叫核心函式,gpu執行程式 5.傳輸結果到cpu 6.繼續主機 執行。下圖是兩個向量相加的簡單示例程式和處理流圖...
OpenCV OpenCV中GPU模組使用
cuda基本使用方法 在介紹opencv中gpu模組使用之前,先回顧下cuda的一般使用方法,其基本步驟如下 1.主機 執行 2.傳輸資料到gpu 3.確定grid,block大小 4.呼叫核心函式,gpu執行程式 5.傳輸結果到cpu 6.繼續主機 執行。下圖是兩個向量相加的簡單示例程式和處理流圖...
OpenCV OpenCV中GPU模組使用
cuda基本使用方法 在介紹opencv中gpu模組使用之前,先回顧下cuda的一般使用方法,其基本步驟如下 1.主機 執行 2.傳輸資料到gpu 3.確定grid,block大小 4.呼叫核心函式,gpu執行程式 5.傳輸結果到cpu 6.繼續主機 執行。下圖是兩個向量相加的簡單示例程式和處理流圖...