【发布时间】:2012-02-24 09:26:38
【问题描述】:
我正在使用 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 分类器在我使用它们时总是会使我的应用程序崩溃。但是其他一些分类器总是在第一帧上工作,然后在几帧后崩溃。
顺便说一句,我从这个方法中初始化分类器只是为了测试目的。在构造 ProcessorObject 时只初始化一次也无济于事......
分类器-XML 会不会不兼容?
提前致谢!
【问题讨论】: