OpenCV:System.Runtime.InteropServices.SEHException

时间:2013-07-13 15:28:43

标签: c++ .net visual-studio-2010 visual-c++ opencv

请查看以下代码

声明

vector<vector<Point>> *contours;
vector<vector<Point>> *contoursPoly;

contours = new vector<vector<Point>>();
contoursPoly = new vector<vector<Point>>();

实施

//Find contours
findContours(*canny,*contours,*heirarchy,CV_RETR_TREE,CV_CHAIN_APPROX_SIMPLE,Point(0,0));

//Draw contours
//drawContours(*current,*contours,-1,Scalar(0,0,255),2);

for(int i=0;i<contours->size();i++)
{
  cv::approxPolyDP(Mat(contours[i]),contoursPoly[i], 3, true);
}

一旦我运行此代码,我就会收到错误

A first chance exception of type 'System.Runtime.InteropServices.SEHException' occurred in Automated  System.exe
An unhandled exception of type 'System.Runtime.InteropServices.SEHException' occurred in Automated System.exe

此错误来自代码的此代码部分

cv::approxPolyDP(Mat(contours[i]),contoursPoly[i], 3, true);

为什么我会这样做?

1 个答案:

答案 0 :(得分:1)

contoursPoly是指向矢量的指针。

contoursPoly[i]将向量的指针视为向量数组,并获取i个。

你想要(*contoursPoly)[i],它首先取消引用指针。 (*contours)[i]可能也是如此。

此外,可能没有理由使用指向矢量的指针。

替换:

vector<vector<Point>> *contours;
vector<vector<Point>> *contoursPoly;

contours = new vector<vector<Point>>();
contoursPoly = new vector<vector<Point>>();

vector<vector<Point>> contours;
vector<vector<Point>> contoursPoly;

然后,从<:p>中删除取消引用*

findContours(*canny,*contours,*heirarchy,CV_RETR_TREE,CV_CHAIN_APPROX_SIMPLE,Point(0,0));
像这样:

findContours(canny,contours,*heirarchy,CV_RETR_TREE,CV_CHAIN_APPROX_SIMPLE,Point(0,0));

并将函数中的std::vector<std::vector<Point>>*参数更改为std::vector<std::vector<Point>>&个参数。使用->替换对此类变量使用.,并删除解除引用。

基于堆的分配(即免费存储)是您有时只需要在C ++中执行的操作。不要做不必要的事。