Используйте OctreePointCloudCompression с PointXYZRGBNormal - PullRequest
0 голосов
/ 01 июля 2018

Я хотел бы сжать облако с типом точки pcl::PointXYZRGBNormal и попытался использовать класс pcl::io::OctreePointCloudCompression.

pcl::io::OctreePointCloudCompression<pcl::PointXYZRGBNormal> не был предварительно создан, поэтому я попытался сделать это сам:

#include <pcl/compression/octree_pointcloud_compression.h>
#include <pcl/io/impl/octree_pointcloud_compression.hpp>
#include <pcl/impl/instantiate.hpp>

PCL_INSTANTIATE(OctreePointCloudCompression, (pcl::PointXYZRGBNormal));

pcl::io::compression_Profiles_e compressionProfile = pcl::io::MED_RES_OFFLINE_COMPRESSION_WITH_COLOR;
auto PointCloudEncoder = pcl::io::OctreePointCloudCompression<pcl::PointXYZRGBNormal>(compressionProfile, true);

Как только я добавляю заголовок octree_pointcloud_compression.hpp (со следующими строками в комментариях), я получаю следующую ошибку:

Ошибка LNK2001: неразрешенный внешний символ "public: unsigned long __cdecl pcl :: StaticRangeCoder :: encodeCharVectorToStream (класс std :: vector> const &, class std :: basic_ostream> &) " (? encodeCharVectorToStream @ StaticRangeCoder @ pcl @@ QEAAKAEBV? $ vector @ DV? $ allocator @ D @ std @@@ std @@ AEAV? $ basic_ostream @ DU? $ char_traits @ D @ std @@@ 4 @@ Z) Тест .Core.Native

Примечание : я использую предварительно скомпилированный PCL 1.8.1 в Windows 10 и использую Visual Studio 2017 (15.7.4).


UPDATE

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

CMakeLists.txt

cmake_minimum_required(VERSION 2.8 FATAL_ERROR)

project(point_cloud_compression)

find_package(PCL 1.8 REQUIRED)

include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})

add_executable (point_cloud_compression point_cloud_compression.cpp)
target_link_libraries (point_cloud_compression ${PCL_LIBRARIES})

point_cloud_compression.cpp

#include <pcl/point_cloud.h>
#include <pcl/point_types.h>

#include <pcl/compression/octree_pointcloud_compression.h>
#include <pcl/io/impl/octree_pointcloud_compression.hpp>
#include <pcl/impl/instantiate.hpp>

#define PCL_INSTANTIATE_OctreePointCloudCompression(T)                \
  template class PCL_EXPORTS pcl::io::OctreePointCloudCompression<T>;

PCL_INSTANTIATE(OctreePointCloudCompression, (pcl::PointXYZRGBNormal));

int
main (int argc, char **argv)
{
    pcl::io::compression_Profiles_e compressionProfile = pcl::io::MED_RES_ONLINE_COMPRESSION_WITH_COLOR;

    pcl::io::OctreePointCloudCompression<pcl::PointXYZRGBNormal>* PointCloudEncoder;
    PointCloudEncoder = new pcl::io::OctreePointCloudCompression<pcl::PointXYZRGBNormal>(compressionProfile, true);     

    delete (PointCloudEncoder);

  return (0);
}
...