Отладка завершилась неудачно: векторный индекс находится вне допустимого диапазона в руководстве по PCL «Сглаживание и нормальная оценка на основе полиномиальной реконструкции»

0

Я новичок в pcl, и я пытаюсь визуализировать код из учебника "Сглаживание и нормальная оценка на основе полиномиальной реконструкции", и я получаю это сообщение, когда я его отлаживаю в VS2012 (я использую pcl 1.7):

Ошибка отладки!

Программа: C:\Windows\system32\MSVCP110D.dll Файл: C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\vector Линия: 1140

Выражение: векторный индекс вне диапазона

Информацию о том, как ваша программа может вызвать ошибку утверждения, см. В документации Visual C++ к утверждениям.

и после того, как я нажимаю "Повторить", я получаю еще один:

Ошибка отладки!

Программа:... tudio 2012\Projects\Tutorials\x64\Debug\pcl_surface_debug.dll Файл: C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\vector Линия: 1141

Выражение: "Стандартные C++ библиотеки вне диапазона" && 0

Информацию о том, как ваша программа может вызвать ошибку утверждения, см. В документации Visual C++ к утверждениям.

(Нажмите "Повторить", чтобы отладить приложение). Программа "[964] MLS.exe" вышла с кодом 3 (0x3).

затем я отлаживал его по строкам, на котором он останавливался

mls.process(mls_points);

Он также открывает "stdthrow.cpp":

ifdef _DEBUG

_CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Debug_message (const wchar_t * message, const wchar_t * file, unsigned int line) {//сообщить об ошибке и умереть if (:: _ CrtDbgReportW (_CRT_ASSERT, файл, строка, NULL, L "% s", сообщение) == 1) {:: _ CrtDbgBreak(); }} _CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Debug_message (const unsigned short * message, const unsigned short * file, unsigned int line) {//сообщить об ошибке и умереть _Debug_message ((wchar_t *) message, (wchar_t *) file, line); }

ENDIF

и останавливается на

:: _ CrtDbgBreak();

Может кто-нибудь объяснить проблему? Вот код на странице руководства pcl:

#include <pcl/point_types.h>
#include <pcl/io/pcd_io.h>
#include <pcl/kdtree/kdtree_flann.h>
#include <pcl/surface/mls.h>

int
main (int argc, char** argv)
{
  // Load input file into a PointCloud<T> with an appropriate type
  pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ> ());
  // Load bun0.pcd -- should be available with the PCL archive in test 
  pcl::io::loadPCDFile ("bun0.pcd", *cloud);

  // Create a KD-Tree
  pcl::search::KdTree<pcl::PointXYZ>::Ptr tree (new pcl::search::KdTree<pcl::PointXYZ>);

  // Output has the PointNormal type in order to store the normals calculated by MLS
  pcl::PointCloud<pcl::PointNormal> mls_points;

  // Init object (second point type is for the normals, even if unused)
  pcl::MovingLeastSquares<pcl::PointXYZ, pcl::PointNormal> mls;
 
  mls.setComputeNormals (true);

  // Set parameters
  mls.setInputCloud (cloud);
  mls.setPolynomialFit (true);
  mls.setSearchMethod (tree);
  mls.setSearchRadius (0.03);

  // Reconstruct
  mls.process (mls_points);

  // Save output
  pcl::io::savePCDFile ("bun0-mls.pcd", mls_points);
}
Теги:
visual-studio-2012
point-cloud-library

1 ответ

0

У вашего KdTree нет ввода, это решит вашу проблему: добавьте tree->setInputCloud (cloud); После pcl::search::KdTree<pcl::PointXYZ>::Ptr tree (new pcl::search::KdTree<pcl::PointXYZ>);

  • 0
    Не могли бы вы добавить более подробную информацию о предложенном вами решении?
  • 0
    Вам лучше проверить официальный учебник: pointclouds.org/documentation/tutorials/…

Ещё вопросы

Сообщество Overcoder
Наверх
Меню