Выпуклый корпус & amp; Повреждение кучи с помощью openCV

В настоящее время я работаю над камерой Intel Perceptual с OpenCv. Я могу получать изображения с камеры, конвертируя их в типы cv :: Mat, затем применяя скин и фильтр глубины.
Теперь я хочу вычислить выпуклую оболочку с помощью функции «выпуклого» из openCV, но это приводит к повреждению кучи.

Вот интересная часть кода:

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.

NB: это внутри петли.
Любое предложение ?

PS: у меня была та же проблема с использованием PCL: как только я попытался вычислить нормали, появилось повреждение кучи.

0

Решение

Для решения проблемы повреждения кучи попробуйте следующее, если вы используете более новую VS, чем VS 2010: перейти к свойствам вашего проекта в VS201 ?. Убедитесь, что для конфигурации задано «Все конфигурации». Затем в разделе «Свойства конфигурации-> Общие-> Набор инструментов платформы» выберите «Visual Studio 2010 (v100)». Open CV использует v100, поэтому, если вы используете IDE, которая не использует, возникает проблема совместимости.

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);
0

По вопросам рекламы [email protected]