1. 程式人生 > >呼叫opencv 人臉檢測實現問題解決~~(VS2013+Opencv)

呼叫opencv 人臉檢測實現問題解決~~(VS2013+Opencv)

前輩的文章詳細介紹了訓練xml分類器的過程,和人臉檢測相關的引數設定和程式碼,原文在這裡:傳送門
但是程式碼直接拿來用的話還是會出問題的,

這篇記錄的就是實現上述文章中呼叫xml的批量圖片人臉檢測遇到的問題和解決的辦法,有空的時候也會將自己訓練的詳細過程和遇到的問題寫出來:

1:首先自己要新建一個VS工程,新建一個是空專案的控制檯應用程式,在專案中新建原始檔,把程式碼複製貼上過來:
這裡寫圖片描述

2:需要重新配置Opencv的包含目錄,庫目錄和連結庫:
這裡寫圖片描述
這裡寫圖片描述

新增依賴項:

Wininet.lib
opencv_ml249d.lib
opencv_calib3d249d.lib
opencv_contrib249d.lib
opencv_core249d.lib opencv_features2d249d.lib WinInet.lib opencv_flann249d.lib opencv_gpu249d.lib opencv_highgui249d.lib opencv_imgproc249d.lib opencv_legacy249d.lib opencv_objdetect249d.lib opencv_ts249d.lib opencv_video249d.lib opencv_nonfree249d.lib opencv_ocl249d.lib opencv_photo249d.lib opencv_stitching249d.lib
opencv_superres249d.lib opencv_videostab249d.lib opencv_objdetect249.lib opencv_ts249.lib opencv_video249.lib opencv_nonfree249.lib opencv_ocl249.lib opencv_photo249.lib opencv_stitching249.lib opencv_superres249.lib opencv_videostab249.lib opencv_calib3d249.lib opencv_contrib249.lib opencv_core249.lib
opencv_features2d249.lib opencv_flann249.lib opencv_gpu249.lib opencv_highgui249.lib opencv_imgproc249.lib opencv_legacy249.lib opencv_ml249.lib

3需要注意的地方:

第一個:

#pragma comment(lib,"Wininet.lib")  這裡可能需要自己下載wininet.lib和標頭檔案,同和和opencv一樣設定庫目錄和附加依賴項

程式的修改,修改自己圖片和分類器存放的路徑:

using namespace std;
using namespace cv;

String cascadeName = "E://paper//MIT//haarcascade_frontalface_alt2.xml";//訓練資料  
//String cascadeName = "E://paper//MIT//data//cascade.xml";
struct PathElem{
    TCHAR   SrcImgPath[MAX_PATH * 2];
    TCHAR   RstImgPath[MAX_PATH * 2];
};
int FindImgs(char * pSrcImgPath, char * pRstImgPath, std::list<PathElem> &ImgList);
    int nFlag = FindImgs("E:\\paper\\Caltech\\", "E:\\paper\\Caltech_save\\", ImgList);//修改為自己的路徑,第一個是待檢測圖片,第二個路徑是檢測結果儲存
    if (nFlag != 0)
    {
        cout << "Read Image  error !  Input 0 to exit \n";
        exit(0);
    }

到這裡,可以編譯試執行下,遇到一堆錯誤:

  1. 1>d:\code\test_xml\test_xml\test_xml.cpp(57): warning C4018: “<=”: 有符號/無符號不匹配
    1>d:\code\test_xml\test_xml\test_xml.cpp(59): error C2664: “cv::Mat cv::imread(const std::string &,int)”: 無法將引數 1 從“TCHAR [520]”轉換為“const std::string &”
    1> 原因如下: 無法從“TCHAR [520]”轉換為“const std::string”
    1> 無建構函式可以接受源型別,或建構函式過載決策不明確

解決方法其實很簡單:
在屬性頁常規中將字符集修改為使用多字元位元組

編譯通過,可以檢視人臉檢測的效果啦,

到這裡又發現無論怎樣調整縮放的尺度,檢測完儲存的圖片都沒有人臉框:

            //detectMultiScale函式中smallImg表示的是要檢測的輸入影象為smallImg,rects表示檢測到的目標序列,1.1表示  
            //每次影象尺寸減小的比例為1.1,2表示每一個目標至少要被檢測到3次才算是真的目標(因為周圍的畫素和不同的視窗大  
            //小都可以檢測到目標),CV_HAAR_SCALE_IMAGE表示不是縮放分類器來檢測,而是縮放影象,Size(30, 30)為目標的  
            //最小最大尺寸  
            rects.clear();
            printf("begin...\n");
            t = (double)cvGetTickCount();//用來計算演算法執行時間  
            cascade.detectMultiScale(smallImg, rects, 1.75, 2, 0,  Size(30, 30));
            //|CV_HAAR_FIND_BIGGEST_OBJECT//|CV_HAAR_DO_ROUGH_SEARCH|CV_HAAR_SCALE_IMAGE,  

通過對比別人的程式碼,發現是因為目標的最大最小尺寸有問題,這裡我刪去size(20,20),在執行,結果就正常了,經測試,自己訓練的xml還不錯,哈哈~~

修改前:
cascade.detectMultiScale(smallImg,rects,1.1,2,0,Size(20,20),Size(30,30));
修改後:
cascade.detectMultiScale(smallImg, rects, 1.75, 2, 0, Size(30, 30));

這個引數的設定要根據自己圖片的情況自己調整~

檢測結果:
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述

相關推薦

呼叫opencv 人臉檢測實現問題解決~~(VS2013+Opencv)

前輩的文章詳細介紹了訓練xml分類器的過程,和人臉檢測相關的引數設定和程式碼,原文在這裡:傳送門 但是程式碼直接拿來用的話還是會出問題的, 這篇記錄的就是實現上述文章中呼叫xml的批量圖片人臉檢測遇到的問題和解決的辦法,有空的時候也會將自己訓練的詳細過程和

OPENCV人臉檢測實現

前段日子,寫了個人臉檢測的小程式,可以檢測標記圖片、視訊、攝像頭中的人臉。效果還行吧,用的是opencv提供人臉庫。至於具體的人臉檢測原理,找資料去啃吧。 環境:VS2013+OPENCV2.4.10+Win8.1 一 基於對話方塊的MF

OpenCV呼叫攝像頭 , 人臉檢測demo

github部落格傳送門 csdn部落格傳送門 環境: 安裝OpenCV: conda install opencv 或 pip install opencv 安裝PIL: conda install pillow pip install pillow 效果: 所需檔案: 下載連結: 所需檔案

Python-OpenCV人臉檢測---直接呼叫訓練好的Harr特徵

人臉檢測 定義人臉檢測函式detectFaces(),檢測圖片中所有出現的人臉,並返回人臉的矩形座標(矩形左上、右下頂點座標)。使用上面提到的xml檔案(haar特徵),haarcascades目錄下有好幾個是關於人臉檢測的檔案,這裡選擇haarcascade_frontalface_default.

opencv人臉檢測_Haar特徵分類器實現人臉檢測_cascade.detectMultiScale引數詳解

1.  概述 CascadeClassifier為OpenCV中cv namespace下用來做目標檢測的級聯分類器的一個類。該類中封裝的目標檢測機制,簡而言之是滑動視窗機制+級聯分類器的方式 2.  支援的特徵 對於Haar、LBP和HOG,CascadeClas

opencv+人臉檢測(OpenCv3.0+VS2013)

進入正題吧----------------->最近一直在弄人臉檢測的程式碼,用的就是opencv3.0自己帶的人臉檢測的程式碼,可是一直就是出錯,在網上搜了好多,一直沒有找到解決的辦法,可能是自

(學習筆記二)——基於opencv人臉檢測原理及實現

最近搞了幾天的人臉檢測,終於把大體框架和原理搞清楚了,現在寫出來供大家學習之用,如有不對之處,還請大家指正。也希望大家在學習opencv的過程中能將學習過程及重點記錄下來,以部落格的形式分析,畢竟opencv的教材還不太多,我們自己學習大部分要靠網上的資料。通過部落格分享的

基於opencv人臉檢測原理及實現

最近搞了幾天的人臉檢測,終於把大體框架和原理搞清楚了,現在寫出來供大家學習之用,如有不對之處,還請大家指正。也希望大家在學習opencv的過程中能將學習過程及重點記錄下來,以部落格的形式分析,畢竟opencv的教材還不太多,我們自己學習大部分要靠網上的資料。通過部落格分享

OpenCV人臉檢測使用detectMultiScale可能會報錯_CrtIsValidHeapPointer的解決方法

執行環境:VS2012+OpenCV2.4.8。 存在問題: 在使用OpenCV的人臉檢測時,用到了detectMultiScale函式,使用方法為:face_cascade.detectMultiScale( frame_gray, faces, 1.1,

OpenCV人臉檢測(完整源代碼+思路)

exceptio pop ret 基礎 err 攝像 alt lena ann 本博文IDE為vs2013 OpenCV2.49 話不多說,先看視頻演示(20S演示): 例如以下: https://v.youku.com

簡單opencv人臉檢測程式碼:LBP/Haar特徵

前言 目前網路上有太多opencv人臉檢測程式碼,但大部分都是用老的1.0介面,程式碼存在太多冗餘(各種記憶體分配...看著太不舒服了,話說還有人用1.x版本的opencv嗎- -),而實際上用2.0以上版本實現人臉檢測功能是可以比較簡潔的。(官方也早有相關示例) 人臉檢

keras系列︱人臉表情分類與識別:opencv人臉檢測+Keras情緒分類(四)

人臉識別熱門,表情識別更加。但是表情識別很難,因為人臉的微表情很多,本節介紹一種比較粗線條的表情分類與識別的辦法。 Keras系列: 本次講述的表情分類是識別的分析流程分為:

python-opencv-人臉識別實現 從圖片中扣人臉

最近專案需要,從百度,bing 爬取圖片,並對圖片中人臉進行扣取,然後扣取的人臉作為機器學習的樣本資料進行人工標註,圖片爬取了人工篩選比較耗時,於是查詢資料發現opencv庫中人臉識別可以實現該需求,識別率還可以。 #-*-coding:utf8-*- import os

Opencv人臉檢測

OpenCv人臉檢測: 要實現人臉識別功能,首先要進行人臉檢測,判斷出圖片出人臉的位置,才能進行下一步的操作! OpenCv人臉檢測的方法 在OpenCv中主要使用兩種特徵(即兩種方法)進行人臉檢測 1、Haar特徵 2、LBP特

*.exe觸發了一個斷點--opencv人臉檢測

*.exe觸發了一個斷點–opencv人臉檢測 利用opencv進行人臉檢測,遇到一個十分不解的問題,每次程式退出都會觸發斷點,單步除錯無數次根本沒用,最後偶然得以解決,記錄在此,防止後來者踩坑。 事情發生在女朋友的電腦上,她之前裝的vs2010,然

vs2015學習qt562_64位的opencv人臉檢測專案工程配置

1、說明:文件中不懂的地方可參考:vs2015學習opencv330_64位的工程配置 。 2、vs2015下載安裝 3、vs2015的qt外掛下載安裝 4、qt庫下載安裝(最後的分享地址中,在qt庫的目錄下面找到安裝包,安裝好後再把需要的庫拷貝到qt

opencv人臉檢測,旋轉處理

不能 ont sin 賦值 修改配置 裁剪 net ogg 超過 年會簽到,拍自己的大頭照,有的人可能會拍成橫向的,需要旋轉,用人臉檢測並修正它(圖片)。 1. 無腦檢測步驟為: 1. opencv 讀取圖片,灰度轉換 2. 使用CascadeClassifier()通過訓

OpenCV: OpenCV人臉檢測框可信度排序

       使用OpenCV進行人臉識別時,使用 casecade.detectMultiScale        函式,可輸出每個檢測框的置信度 程式碼段: const int numReserve = 4; std::vector<  int

opencv人臉檢測程式碼應用與分析(PC端和Android端)

(1)OpenCV人臉檢測C++程式流程: OpenCV的人臉檢測程式採用了Viola & Jones人臉檢測方法,主要是呼叫訓練好的瀑布級聯分類器cascade來進行模式匹配。 cvHaarDetectObjects先將影象灰度化,根據傳入引數判斷是否進行can

OpenCV人臉檢測的速度

各位大蝦好,小弟有一個關於OpenCV人臉檢測的問題想請教一下: 我用攝像頭開啟480x640的視窗,然後使用OpenCV的人臉檢測函式cvHaarDetectObjects進行人臉檢測。函式配置如下: faces = cvHaarDetectObjects( detectImg, (CvHaarClass