c++ - CascadeClassifier::detectMultiScale 不适用于 C++

标签 c++ opencv

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

这仅在编译调试版本时发生。错误消息是 Debug Assertion Failed,这让我想知道是否在 Release 构建中也出现了问题,只是没有检查断言。

这可能是 OpenCV 的错误吗?还是我处理 vector 的方式有问题?

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

#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
}

我收到以下错误消息:

调试断言失败!

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

表达式:is_block_type_valid(header->_block_use)

最佳答案

我遇到了同样的问题。我通过将取消引用的全局指针传递给该函数来解决它。

    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);
    }

关于c++ - CascadeClassifier::detectMultiScale 不适用于 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30759620/

相关文章:

python - TypeError:setText(self,str):参数1具有意外类型 'tuple'

python - 如何在 OpenCV 中获取图像的宽度和高度?

c++ - header 中的枚举导致过度重新编译

c++ - TCP IP通讯

c++ - Visual Studio <AtlImplementationDetails> 智能感知错误

c++ - 如何在opencv中为图像添加边框,边框颜色必须与图像颜色相同

opencv - 关于人脸验证(相对于人脸识别)的置信度得分有什么建议吗?

c++ - 使用 sfinae 在 clase 模板中选择不同的方法实现

c++ - 我是否必须使用 ComPtr 调用释放函数?

python - 在Python中读取给定目录中的图像文件