1.普通照片:
#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("1.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;
}
2.摄像头中的图片:
#include <pcl/io/io.h>
#include <pcl/io/pcd_io.h>
#include <opencv2/opencv.hpp>
#include <pcl/visualization/cloud_viewer.h>
using namespace pcl;
using namespace cv;
int main()
{
RNG rng;
PointCloud<pcl::PointXYZRGB>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZRGB>);
Mat img;
VideoCapture cap(0); cap >> img;
if (!cap.isOpened())return -1;
int sz = img.rows*img.cols;
cloud->width = sz;
cloud->points.resize(sz);
visualization::CloudViewer viewer("Cloud Viewer");
for (; waitKey(1) != 27;)
{
cap >> img;
for (unsigned int i = 0; i < sz; i += 3)
{
cloud->points[i].x = rng.uniform(-1.0f, 1.0f);
cloud->points[i].y = rng.uniform(-1.0f, 1.0f);
cloud->points[i].z = rng.uniform(-1.0f, 1.0f);
cloud->points[i].r = img.data[i + 2];
cloud->points[i].g = img.data[i + 1];
cloud->points[i].b = img.data[i];
}
viewer.showCloud(cloud);
}
return 0;
}