级联GPU检测OpenCV 3.0中的多级置信度

时间:2015-10-26 13:24:25

标签: c++ opencv opencv3.0

我在OpenCV 3.0中有一个使用带有自定义XML文件的级联分类器的工作程序。

我想加快速度,所以我改为GPU方法。 这是工作程序(CPU方法):

// image_src (cv::Mat) is the source image, captured from webcam
cv::CascadeClassifier cascade;  
cv::Mat image_src_gray;
vector<cv::Rect> foundObjects;
vector<int> numDetect;

cv::cvtColor( image_src, image_src_gray, CV_BGR2GRAY );

cascade.detectMultiScale(
    image_src_gray,
    foundObjects, // return: objects vector
    numDetect, // return: confidence vector
    1.1,
    4, // neighbors
    0|cv::CASCADE_SCALE_IMAGE, // flags
    cv::Size(40,40), // minSize
    image_src.size() // maxSize
);

通过这种方式,我能够通过numDetect向量知道每个检测到的对象的置信度,并过滤掉不良结果。我使用detectMultiScale的三种形式中的一种。

使用GPU程序,函数detectMultiScale似乎无法返回置信度结果。 这是GPU程序:

// image_src (cv::Mat) is the source image, captured from webcam
cv::Ptr<cv::cuda::CascadeClassifier> cascade_gpu;
cv::cuda::GpuMat image_src_gpu, image_src_gray_gpu;
vector<cv::Rect> foundObjects;
vector<int> numDetect;

image_src_gpu.upload(image_src);
cv::cuda::cvtColor( image_src_gpu, image_src_gray_gpu, CV_BGR2GRAY );

cascade_gpu->setFindLargestObject(true);
cascade_gpu->setScaleFactor(1.1);
cascade_gpu->setMinNeighbors(4);
cascade_gpu->setMinObjectSize(cv::Size(40,40));
cascade_gpu->setMaxObjectSize(image_src.size());

cv::cuda::GpuMat foundObjects_gpu;

cascade_gpu->detectMultiScale(
    image_src_gray_gpu,
    foundObjects_gpu
    );
cascade_gpu->convert( foundObjects_gpu, foundObjects );

这样可以正常工作,但不能根据置信度过滤结果。 Cuda detectMultiScale只有一种形式,没有置信水平。

我如何知道每个检测到的物体的置信度?

我的设置:Ubuntu 14.04.1,内核3.19.0-25,openCV 3.0,cuda 7.5。 硬件:i7-2600K - PNY / nVidia Quadro 4000。

0 个答案:

没有答案