Ошибка отладки — индекс вектора вне допустимого диапазона — PCL

Я получаю сообщение об ошибке «Ошибка утверждения отладки», где говорится «индекс вектора вне диапазона», между двумя отпечатками в приведенном ниже фрагменте кода. Я использую PCL 1.7.1 на 64-битной машине, Win7 и VS2010.

Дело в том, что это происходит случайным образом, и я понятия не имею, что делать. Как мне отладить такую ​​вещь, поскольку это выглядит как ошибка в библиотеке облаков точек (PCL), но я сомневаюсь, потому что обычно ошибка со мной.

Код делает следующее: загружает файл .pcd с данными облака точек из файла, а затем пытается создать из него дескриптор ESF. Теперь я знаю, что у меня нет индекса в этом векторе, но тем не менее в моем коде этого не происходит... Есть идеи, что я могу делать неправильно?

pcl::PointCloud<pcl::ESFSignature640>::Ptr  createESFDescriptor(std::vector<float> v) {

    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);
    pcl::io::loadPCDFile("data.pcd", *cloud);
    std::cout << "size: " << cloud->size() << std::endl;

    pcl::ESFEstimation<pcl::PointXYZ,pcl::ESFSignature640> esf;
    esf.setInputCloud(cloud);

    pcl::search::KdTree<pcl::PointXYZ>::Ptr kdtree (new pcl::search::KdTree<pcl::PointXYZ>);
    esf.setSearchMethod(kdtree);

    pcl::PointCloud<pcl::ESFSignature640>::Ptr esfPointer(new pcl::PointCloud<pcl::ESFSignature640> ());

    printf("dbg1");
    esf.compute(*esfPointer);
    printf("dbg2");

    return esfPointer;
}

person user3507070    schedule 07.04.2014    source источник


Ответы (1)


В вашем kdtree нет входных данных, добавьте kdtree.setInputCloud (cloud);под pcl::search::KdTree<pcl::PointXYZ>::Ptr kdtree (new pcl::search::KdTree<pcl::PointXYZ>);

ознакомьтесь с официальным руководством:http://pointclouds.org/documentation/tutorials/kdtree_search.php#kdtree-search

person gouchaoer    schedule 27.04.2015
comment
У меня была такая же проблема, и это, похоже, не решило проблему. Любые другие предложения? - person brad; 18.01.2017