Я использую следующий код:Программы падает на использование grabCut в 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()
деструктор, то код авария на release()
(говорит «возможно, из-за повреждения кучи») для gcImg или bgdModel или fgdModel.
Однако, если я размещаю cv::Mat
s на куче, используя new
, а затем не удаляйте их после, код работает нормально. Я использую Visual Studio 2010 с OpenCV 2.3.1.