簡體   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