CascadeClassifier :: detectMultiScale不适用于C ++

时间:2015-06-10 14:40:05

标签: c++ opencv

我使用OpenCV和CascadeClassifier::detectMultiScale进行面部检测。我的问题是它似乎导致输出vector<Rect>上的内存损坏。向量使用Rects正确填充,但在释放向量时会导致崩溃。

这仅在编译Debug构建时发生。错误消息是Debug Assertion Failed,这让我想知道在Release版本中是否也存在问题,并且断言根本没有被检查。

这可能是OpenCV的错误吗?或者仅仅是因为我处理我的载体而做错了什么?

以下代码段显示了重现错误的示例代码:

#include <opencv2/opencv.hpp>
using namespace cv;

int main(array<System::String ^> ^args)
{
    VideoCapture video(0);
    Mat frame;
    CascadeClassifier classifier("haarcascade_frontalface_default.xml");

    while (waitKey(1000 / 30) != 'q')
    {
        video >> frame;

        vector<Rect> faces;
        classifier.detectMultiScale(frame, faces);
        for (int i = 0; i < faces.size(); i++)
            rectangle(frame, faces[i], Scalar(255, 255, 255));

        imshow("Camera", frame);
    } // <<< The crash occurs here when the faces vector is released
}

我收到以下错误消息:

Debug Assertion失败!

程序:MyProgram.exe 文件:minkernel \ crts \ ucrt \ src \ appcrt \ heap \ debug_heap.cpp 行:892

表达式:is_block_type_valid(header-&gt; _block_use)

1 个答案:

答案 0 :(得分:3)

我有同样的问题。我通过将一个解除引用的全局指针传递给函数来解决它。

    std::vector<cv::Rect>* faces = nullptr;

    void init()
    {
        faces = new std::vector<cv::Rect>; //never call delete whatever you do
    }

    void findSomeFaces()
    {
        cascade->detectMultiScale(image_source, *faces);
    }