我正在尝试使用以下使用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的分类器。程序启动但显示错误消息:
我已经安装了APP SDK v 2.9.1 我使用的是Visual Studio 2012 Express Edition,Opencv 2.4.10 我哪里出错?
由于
编辑&gt;&GT;
cv::ocl::oclMat oclGray;
oclGray.upload(gray);
以上代码导致错误..
答案 0 :(得分:1)
看起来这行face_detector.load(face_cascade);
失败了(使用调试器确保我正确)。确保路径正确并且级联文件的格式有效,您可以尝试使用不同的级联,当然也要确保正确安装和配置OCL。