0

我目前正在使用 OpenCv 开发 Intel Perceptual 相机。我可以从相机中获取图像,将它们转换为 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);

其中 skin 是一个填充了 255 和 0 值的矩阵。

注意:这是在一个循环内。
有什么建议吗?

PS:我在使用 PCL 时遇到了同样的问题:当我尝试计算法线时,出现了堆损坏。

4

2 回答 2

0

如果您使用比 VS 2010 更新的 VS,则对于您的堆损坏问题,请尝试以下操作:转到 VS201 中的项目属性?确保配置设置为“所有配置”。然后,在“配置属性->常规->平台工具集”下选择“Visual Studio 2010 (v100)”。Open CV 使用 v100,因此如果您使用的 IDE 没有,则存在兼容性问题。

于 2014-07-24T21:46:32.963 回答
0

我有同样的问题。破坏矢量外壳时发生内存损坏。

 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);
于 2015-02-25T01:07:33.303 回答