繁体   English   中英

在OpenCV 2.3.1中使用grabCut导致程序崩溃

[英]Program crashes on using grabCut in OpenCV 2.3.1

我正在使用以下代码:

#include <iostream>

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;

    int main(int argc, char* argv[])
    {
        const string ipImgName= argv[1];
        Mat ipImg;
        ipImg = imread( ipImgName, 1 );

        cv::Mat gcImg;
        cv::Mat bgdModel;
        cv::Mat fgdModel;
        cv::Rect rect(0, 0, ipImg.cols-1, ipImg.rows-1);
        cv::grabCut( ipImg, gcImg, rect, bgdModel, fgdModel, 1, cv::GC_INIT_WITH_RECT ); 


        return 0;
    }

但是,当退出主循环时,调试器进入~Mat()析构函数时,对于gcImg或bgdModel或fgdModel,代码在release()上崩溃(说“这可能是由于堆损坏”)。

但是,如果我使用new在堆上分配cv::Mat ,然后再不删除它们,则代码可以正常运行。 我将Visual Studio 2010与OpenCV 2.3.1一起使用。

如果您正在运行与Release库链接的Debug版本,则由于使用了不同的内存分配例程,因此可能会报告此虚假的“错误”。

在Debug版本中,在分配的块的任一端用保护字节保护内存分配,并执行各种检查以检查是否损坏,泄漏等。在Release版本中,不执行这些检查,并且当您混合使用Debug和Release代码时,一个释放了另一个,这是您看到的典型错误。

实际上这不是真正的错误,只是混合不同运行时的副作用。 MSDN有更多详细信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM