OpenCV GPU FaceDetector示例在随机帧上崩溃

时间:2012-01-19 17:51:51

标签: opencv gpu

我正在使用OpenCV 2.3.1中的GPU模块尝试基于Haarcascade的FaceDetection。

我的代码正在编译,有时它会显示初始帧,在输出帧上绘制一个或多个ROI矩形以突出显示检测到的对象。

但是在这种探测器方法的第二次或第三次重复调用后,它只是崩溃了。编译器说SIGABRT。对此有何建议?

以下是代码:

cv::Mat ProcessorWidget::detectGPU(Mat &img) {

    cv::gpu::CascadeClassifier_GPU cascade_gpu(QFileDialog::getOpenFileName(this).toStdString());

    img.copyTo(image_cpu);
    gpu::GpuMat image_gpu(image_cpu);

    gpu::GpuMat objbuf;
    int detections_number = cascade_gpu.detectMultiScale( image_gpu,
              objbuf, 1.2);

    Mat obj_host;
    // download only detected number of rectangles
    objbuf.colRange(0, detections_number).download(obj_host);

    Rect* faces = obj_host.ptr<Rect>();
    for(int i = 0; i < detections_number; ++i)
       cv::rectangle(image_cpu, faces[i], Scalar(255));
    return image_cpu;
}

另一点是,一些使用OpenCV的Haarcascade分类器在我使用它们时总是会崩溃我的应用程序。但是其他一些分类器总是在第一帧上工作,然后在几帧后崩溃。

BTW我在此方法中初始化分类器仅用于测试目的。在构造ProcessorObject时只启动它一次也没有帮助......

分类器-XML是否会以某种方式不兼容?

提前致谢!

1 个答案:

答案 0 :(得分:1)

直接来自文档:

仅支持旧的haar分类器(由haar培训应用程序培训)和NVIDIA的nvbin。