我正在使用以下代码:
#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()
(说“这可能是由于堆损坏”)。
但是,如果我在堆上分配cv::Mat
s 使用new
然后不删除它们,代码运行得很好。我正在使用带有 OpenCV 2.3.1 的 Visual Studio 2010。