利用OpenCV提取彩色图像的RGB信息,XYZ随机赋值,创建PCL中的PointCloudXYZRGB形式的点云,并显示出来。
#include <pcl/visualization/cloud_viewer.h> #include <iostream> #include <pcl/io/io.h> #include <pcl/io/pcd_io.h> #include <opencv2/opencv.hpp> int user_data; void viewerOneOff (pcl::visualization::PCLVisualizer& viewer) { viewer.setBackgroundColor (0.0, 0.0, 0.0); } void viewerPsycho (pcl::visualization::PCLVisualizer& viewer) { user_data = 9; } int main () { pcl::PointCloud<pcl::PointXYZRGB> cloud_a; pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZRGB>); cv::Mat image = cv::imread("2.jpg"); int rowNumber = image.rows; int colNumber = image.cols; cloud_a.width = rowNumber; cloud_a.height = colNumber; cloud_a.points.resize(cloud_a.width*cloud_a.height); cv::Mat_<cv::Vec3b>::iterator it = image.begin<cv::Vec3b>(); cv::Mat_<cv::Vec3b>::iterator itend = image.end<cv::Vec3b>(); for(unsigned int i=0; i<cloud_a.points.size(); ++i) { cloud_a.points[i].x = 1024*rand()/(RAND_MAX+1.0f); cloud_a.points[i].y = 1024*rand()/(RAND_MAX+1.0f); cloud_a.points[i].z = 1024*rand()/(RAND_MAX+1.0f); cloud_a.points[i].r = (int) (*it)[2]; cloud_a.points[i].g = (int) (*it)[1]; cloud_a.points[i].b = (int) (*it)[0]; ++it; } *cloud = cloud_a; pcl::visualization::CloudViewer viewer("Cloud Viewer"); viewer.showCloud(cloud); viewer.runOnVisualizationThreadOnce (viewerOneOff); viewer.runOnVisualizationThread (viewerPsycho); while (!viewer.wasStopped ()) { user_data = 9; } return 0; }原彩色图像:
创建的点云:
原文:http://blog.csdn.net/kh1445291129/article/details/44627399