C++ openCV的凸包和堆损坏
我目前正在使用OpenCv开发Intel Perceptive camera。我可以从相机中获取图像,将其转换为cv::Mat类型,然后应用蒙皮和深度过滤器。 现在我想用openCV中的convexHull函数计算凸包,但它会造成堆损坏 下面是代码中有趣的部分:C++ openCV的凸包和堆损坏,c++,opencv,heap-corruption,perceptual-sdk,C++,Opencv,Heap Corruption,Perceptual Sdk,我目前正在使用OpenCv开发Intel Perceptive camera。我可以从相机中获取图像,将其转换为cv::Mat类型,然后应用蒙皮和深度过滤器。 现在我想用openCV中的convexHull函数计算凸包,但它会造成堆损坏 下面是代码中有趣的部分: Mat skin = curr.GetSkin() vector<Point> points; for(int i=0; i<skin.rows; i++) { for(int j=0; j<ski
Mat skin = curr.GetSkin()
vector<Point> points;
for(int i=0; i<skin.rows; i++)
{
for(int j=0; j<skin.cols; j++)
{
if ((int) skin.at<unsigned char>(i,j) > 0 )
{
Point pt ;
pt.x = j ;
pt.y = i ;
points.push_back(pt);
}
}
}
Mat img(skin.rows, skin.cols, CV_8UC3);
vector<int> hull;
convexHull(Mat(points), hull, true);
其中,“蒙皮”是一个填充了255和0值的矩阵
注意:这是在一个循环内。
有什么建议吗
PS:我在使用PCL时遇到了同样的问题:当我试图计算法线时,出现了堆损坏。对于堆损坏问题,如果您使用的是比VS 2010更新的VS,请尝试以下操作:转到VS201?中的项目属性?。确保将配置设置为所有配置。然后,在“配置属性->常规->平台工具集”下选择Visual Studio 2010 v100。Open CV使用v100,因此如果您使用的IDE不使用v100,则存在兼容性问题。我也有同样的问题。当向量外壳被销毁时,内存损坏发生
vector<int>* hull = new vector<int>();
convexHull(Mat(points), *hull, true);
delete hull; //memory corrupted
如果船体先调整尺寸,就可以解决这个问题
vector<int> hull;
hull.resize(points.size());
convexHull(Mat(points), hull, true);
您能提供涉及错误的代码吗?根据您提供的信息,唯一可能的建议是您应该找到堆损坏的原因并修复它。您可能是在动态分配数组的边界之外编写,或者是在使用解除分配的对象。我刚刚编辑了我的文章以添加一些代码。如果我拆下Convxhull这条线,一切都会正常运行。。。。谢谢你的回答。x=i;//应该是j!所以,难怪。。。另外,尽量避免像数据[b+17*z-k*29]这样的构造,有很多方法可以实现f%ckup。使用mat.atr、c或mat.ptrr。事实上,我已经修好了,谢谢。但它并没有消除堆损坏。