使用OCL进行人脸检测(OPENCV)

时间:2015-03-21 05:55:56

标签: c++ opencv opencl

我正在尝试使用以下使用GPU的代码检测面部

#include <opencv\cv.h>
#include <opencv\highgui.h>

#include <iostream>
#include <stdio.h>
#include <opencv2\ocl\ocl.hpp>

std::string face_cascade = "C:\\opencv\\data\\haarcascades\\haarcascade_frontalface_alt.xml";

std::vector<cv::Rect> detectFaces(cv::Mat gray){

    cv::ocl::oclMat oclGray;
    std::vector<cv::Rect> faces;
    cv::ocl::OclCascadeClassifier face_detector;

    oclGray.upload(gray);
    face_detector.load(face_cascade);

    face_detector.detectMultiScale(oclGray, faces,  1.1, 3, 0|CV_HAAR_SCALE_IMAGE, cv::Size(30, 30), cv::Size(0, 0));
    return faces;
}

int main(){

    cv::VideoCapture webcam;
    cv::Mat mainImage;
    std::vector<cv::Rect> faces;

    webcam.open(0);
    cv::namedWindow("face",CV_WINDOW_AUTOSIZE);

    while(webcam.isOpened()){
        webcam.read(mainImage);
        if(!mainImage.empty()){
            cv::resize(mainImage,mainImage,cv::Size(640,480),0,0,1);
            cv::Mat gray(mainImage);
            cv::cvtColor(gray,gray,CV_BGR2GRAY);
            cv::equalizeHist(gray,gray);
            faces = detectFaces(gray);

            for(unsigned int i=0;i<faces.size();i++){
                cv::Rect f_rect = faces[i];
                cv::rectangle(mainImage,f_rect,CV_RGB(255,0,0),1,8,0);
            }
            cv::imshow("face",mainImage);
        }
        cv::waitKey(40);
    }
    return 0;
}

我对正常级联分类器的速度感到满意,因此编码了基于Ocl的分类器。程序启动但显示错误消息:

enter image description here

我已经安装了APP SDK v 2.9.1 我使用的是Visual Studio 2012 Express Edition,Opencv 2.4.10 我哪里出错?

由于

编辑&gt;&GT;

cv::ocl::oclMat oclGray; 
oclGray.upload(gray);

以上代码导致错误..

1 个答案:

答案 0 :(得分:1)

看起来这行face_detector.load(face_cascade);失败了(使用调试器确保我正确)。确保路径正确并且级联文件的格式有效,您可以尝试使用不同的级联,当然也要确保正确安装和配置OCL。