2

В настоящее время я пытаюсь вычислить жесткое преобразование между двумя точками устанавливается таким образом, я пытался использовать код, указанный в руководстве по pointclouds.org:PCL Жесткого преобразования с использованием - Ошибка итеративного алгоритма ближайших точек: вектор стирает итератор вне диапазона

http://www.pointclouds.org/documentation/tutorials/iterative_closest_point.php#iterative-closest-point

Для моего случая я только изменил часть, в которой данные случайным образом сгенерированы для того, что загружает данные точки, которые я хочу проанализировать. Все остальное точно так же, как в учебнике ... (Я также попытался точно проверить код учебника со случайными данными, если у меня было что-то неправильно с чтением моих входных данных)

Поскольку я работаю с Qt I, Библиотеку PCL, библиотеку Eigen и библиотеку FLANN для моего проекта. Он находит все заголовки и успешно компилируется MSVC 2008 ...

К сожалению, я всегда получаю сообщение об ошибке выполнения на

icp.setInputTarget(cloud_out); 

говоря:

Debug Assertion failed! Program: ...MSVC2008_Qt_SDK_Release\release\Project.exe File: c:\Program Files\Microsoft VIsual Studio 10.0\CV\include\vector Line: 1200

Expression: vector erase iterator outside range

[..] ... check documentation ... [..]

Кто-нибудь знает, что это значит? Входные облака имеют одинаковый размер и заполняют значения.

Я был бы благодарен за помощь!

UPDATE 1:

Сообщение об ошибке показывает, какой путь к файлу для MSVC 2010 (10.0) ... Так что я попытался удалить Visual Studio 2010, так как я на самом деле не нужно. Но все же, если я скомпилирую в режиме Debug, он покажет мне сообщение об ошибке, но вместо этого будет Expression: vector iterators incompatible ... Если я сейчас запустил его в режиме Release, он просто сработает во время выполнения (в той же строке), но не показывает это сообщение об ошибке.

+0

Что такое 'icp' и' cloud_out'? Он не отображает сообщение об отладке при компиляции в режиме Release, потому что утверждения отладки обрабатываются только в компиляции Debug. – cmannett85

+0

Вы пробовали запустить его в отладчике и найти, какая из них запускает его? – cmannett85

+0

cloud_out - это облако точек, которое должно быть сопоставлено. Посмотрите на учебную строку 10. icp - это экземпляр класса IterativeClosestPoint (строка 37). Ну, я попытался отладить его, но я не смог получить информацию из этого, так как я не могу установить точки остановки или что-то еще. Просто увидеть вывод отладчика или дизассемблера не помогло ... Но разве это не странно, что он даже пытается получить некоторую информацию с VC 10.0? Я имею в виду, что после того, как я удалил его, нет даже C: \ Program Files \ Microsoft Visual Studio 10.0 ... –

ответ

0

Возможно, это проблема с библиотекой, которую вы используете. Предполагая, что вы сделали чистую сборку, проверили вашу переменную PATH и все, и что Visual Studio 2010 удален, это может быть проблемой с самой библиотекой. Вы используете правильный?

В текущем Qt SDK есть MSVC2008, поэтому я предполагаю, что он требует всего, от чего он нуждается. Но либо компилятор в Qt, либо одна из библиотек, которые вы используете, может потребоваться версия 2010 года.

Надеюсь, это поможет!

Смежные вопросы