обработка изображений — проблема c ++ segFault

Я пытаюсь сделать программу, которая создает различные фильтры через веб-камеру и столкнулась с некоторыми проблемами с BLOB-анализом и некоторыми другими.

Я получаю segFault каждый раз, когда активирую свою функцию FIFFIFE.
Вот код для моей функции FIFF:

void testApp::grassFire(int mask_Y, int mask_X, unsigned char labelCnt)
{
blobArray[mask_Y * camWidth + mask_X] = labelCnt;
if (mask_X + 1 <= camWidth - 1 && blobArray[mask_Y * camWidth + mask_X + 1] == 0)
grassFire(mask_Y, mask_X + 1, labelCnt);
if (mask_Y + 1 <= camHeight - 1 && blobArray[(mask_Y + 1) * camWidth + mask_X] == 0)
grassFire(mask_Y + 1, mask_X, labelCnt);
if (mask_X - 1 >= 0 && blobArray[mask_Y * camWidth + mask_X - 1] == 0)
grassFire(mask_Y, mask_X - 1, labelCnt);
if (mask_Y - 1 >= 0 && blobArray[(mask_Y - 1) * camWidth + mask_X] == 0)
grassFire(mask_Y - 1, mask_X, labelCnt);
}

И как он вызывается регистром коммутатора, который запускает каждый кадр Это означает, что он вызывается при каждом обновлении кадра

Сама функция объявлена ​​вне любой другой области видимости.

Я знаю, что это действительно тяжелый фильтр, и он может использовать много памяти, но по сравнению с некоторыми другими фильтрами он не так уж плох, поэтому я не могу понять, почему я получаю segFault.

Я также получаю segFault на другом фильтре, который не должен требовать использования памяти.
Я использую openframeworks в кодовых блоках на win 7.

1

Решение

Это не похоже, что вы можете читать / писать вставить конец вашего blobArray так как вы делаете некоторые проверки, значит, вы стали жертвой переполнение стека.

Вы должны использовать отладчик и запустить обратную трассировку, которую многие вызовы не могут скрыть.

2

Другие решения

Если у вас много значений массива 0, вы, вероятно, получаете переполнение стека из-за сильно рекурсивного характера функции. Я бы предложил попробовать итерационный алгоритм заливки вместо этого и посмотрите, решит ли это проблему.

0

Я бы приложил к заявке Valgrind. Valgrind покажет трассировку стека, где произошла ошибка сегментации.

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