利用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