我正在使用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是否会以某种方式不兼容?
提前致谢!
答案 0 :(得分:1)
直接来自文档:
仅支持旧的haar分类器(由haar培训应用程序培训)和NVIDIA的nvbin。