2013-06-15 3 views
5

Ich versuche eine PCL Punktwolke zu generieren. All meine Punkte sind in dem folgenden Containertyp:Erstellen einer PCL Punktwolke mit einem Container Eigenvektor3d

std::vector<Eigen::Vector3d,Eigen::aligned_allocator<Eigen::Vector3d> > 

würde Ich mag einen Zeiger auf eine PCL-Punktwolke zu schaffen:

pcl::PointCloud<pcl::PointXYZ>::Ptr pc 

Was wäre der effizienteste Weg, um diese Punktwolke zu schaffen?

Antwort

3

Da PCL einen Schwimmer zu verwenden scheint, [4], um die Punkte zu speichern, wenn Sie pcl angeben: PointXYZ, werden Sie individuell jedes Element kopieren müssen (nicht getestet):

pc.points.resize(v.size()); 
for(size_t i=0; i<v.size(); ++i) 
    pc.points[i].getVector3fMap() = v[i].cast<float>(); 

, wenn Sie ein gebrauchtes vector4d stattdessen und sichergestellt, dass der letzte Koeffizient jedes Elements 0 ist, könnten Sie eine memcpy oder sogar einen Swap (mit ein bisschen Tricks) tun.

+0

Sie meinen also, wenn ich 'std hatte: : vector > Statt könnte ich einfach 'pc-> points = container' nennen? –

+0

ah ... verpasst, dass Ihre ursprüngliche Frage ein Double verwendet. Sie benötigen eine Besetzung (aktualisierte Antwort). Und nein, die Verwendung von Vector3f hätte immer noch nicht das richtige Speicherlayout. Vector4f würde, aber selbst dann brauchten Sie einige Tricks, um den Container direkt zuzuordnen. – Jakob

-1

Punktwolke:

pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); 

Vector:

std::vector<pcl::PointCloud<pcl::PointXYZ>, Eigen::aligned_allocator<pcl::PointXYZ> > vectorOfPointCloud; 

Push-back-Punktwolken in einen Vektor hinzuzufügen:

vectorOfPointCloud.push_back(*cloud); 
Verwandte Themen