Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ openCV的凸包和堆损坏_C++_Opencv_Heap Corruption_Perceptual Sdk - Fatal编程技术网

C++ openCV的凸包和堆损坏

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

我目前正在使用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<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。事实上,我已经修好了,谢谢。但它并没有消除堆损坏。