xyz数据生成PointXYZ格式点云

描述

假设我们正在使用某款相机,仅仅能读出它每一帧点云数据的xyz值,但是无法使用接口让数据自动记录成想要的格式,可以看看这篇博客

放在指定位置,调用下面的接口代码,就能生成想要的点云数据了

代码

pcl::PointCloud<pcl::PointXYZ>::Ptr readPointCloud_camera(int width, int height, std::vector<int> x, std::vector<int> y, std::vector<int> z)
{
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
    
    cloud->width = width;
    cloud->height = height;
    cloud->points.resize(width*height);

    for (int i = 0 ; i < width*height; i++)
    {
        cloud->points[i].x = x[i];
        cloud->points[i].y = y[i];
        cloud->points[i].z = z[i];
    }
    return cloud;  
}
  • 附赠CMakeLists.txt
cmake_minimum_required(VERSION 2.8.7)
project(test)

find_package(PCL 1.5 REQUIRED)

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

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -fexceptions -frtti -pthread -O3 -march=core2")

set(ROOT 		"${CMAKE_CURRENT_SOURCE_DIR}/")

include_directories(
    ${ROOT}
    ${ROOT}/include
)

file(GLOB SOURCES
    "*.cpp"
    )

link_directories(
    ${ROOT}/lib
)

add_executable(test ${SOURCES})
target_link_libraries(test ${PCL_LIBRARIES})

使用例子

随机生成了10000个三维点,然后赋值给一片点云,并且完成显示

#include <iostream>

//点云需要的头文件
#include <pcl/point_types.h>
#include <pcl/io/ply_io.h>
#include <pcl/visualization/pcl_visualizer.h>

void drawPointCloud(pcl::PointCloud<pcl::PointXYZ>::Ptr cloud, std::string titleName)
{
    pcl::visualization::PCLVisualizer viewer (titleName);
    int v (0);

    viewer.createViewPort (0.0, 0.0, 1.0, 1.0, v);

    viewer.addCoordinateSystem(0.5);

    float bckgr_gray_level = 0.0;  // Black
    float txt_gray_lvl = 1.0 - bckgr_gray_level;

    pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> cloud_in_color_h (cloud, (int) 255 * txt_gray_lvl, (int) 255 * txt_gray_lvl, (int) 255 * txt_gray_lvl);
    viewer.addPointCloud (cloud, cloud_in_color_h, "cloud_in_v1", v);

    viewer.addText (titleName, 10, 15, 16, txt_gray_lvl, txt_gray_lvl, txt_gray_lvl, "icp_info_1", v);

    viewer.setBackgroundColor (bckgr_gray_level, bckgr_gray_level, bckgr_gray_level, v);

    viewer.setCameraPosition (-3.68332, 2.94092, 5.71266, 0.289847, 0.921947, -0.256907, 0);
    viewer.setSize (1280, 1024);

    while (!viewer.wasStopped())
    {
        viewer.spinOnce();
    }
}

pcl::PointCloud<pcl::PointXYZ>::Ptr readPointCloud_camera(int width, int height, std::vector<int> x, std::vector<int> y, std::vector<int> z)
{
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
      
    cloud->width = width;
    cloud->height = height;
    cloud->points.resize(width*height);

    for (int i = 0 ; i < width*height; i++)
    {
        cloud->points[i].x = x[i];
        cloud->points[i].y = y[i];
        cloud->points[i].z = z[i];
    }
    return cloud;  
}

int main(int argc, char** argv)
{
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud;

    std::vector<int> x, y, z;
    for (int i = 0 ; i < 10000; i ++)
    {      
        x.push_back(i);
        y.push_back(i + 2);
        z.push_back(i+10);
    }
    cloud = readPointCloud_camera(100, 100, x, y, z);

    drawPointCloud(cloud, "user defined pointcloud");

	return 1;
}
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值