首页 > 其他 > 详细

结合OpenCV和PCL的点云创建

时间:2015-03-25 21:33:39      阅读:429      评论:0      收藏:0      [点我收藏+]

利用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;
}
原彩色图像:

技术分享

创建的点云:

技术分享

结合OpenCV和PCL的点云创建

原文:http://blog.csdn.net/kh1445291129/article/details/44627399

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!