将cv :: Mat转换为pcl :: pointcloud

时间:2019-05-06 10:18:15

标签: c++ opencv mat openni vision

我编写了一个程序,该程序执行图像的分割:它需要一个rgb帧和一个深度帧,并将它们组合在一起,得到一个只有我感兴趣的对象可见的帧。该图像被放入cv :: Mat对象。我必须将此cv :: Mat转换为pcl对象,才能看到可见对象的点云。

我遵循了以下链接中的指南:

How to convert cv::Mat to pcl::pointcloud

但出现错误:

  

/home/alessiadele/mano_cloud/src/mano/src/mano.cpp:155:37:错误:>尚未声明'SimpleOpenNIViewer'   pcl :: PointCloud :: Ptr SimpleOpenNIViewer :: MatToPoinXYZ>(cv :: Mat O

正如我之前所说,我已经从上一个链接中获取了代码:

pcl::PointCloud<pcl::PointXYZ>::Ptr SimpleOpenNIViewer::MatToPoinXYZ(cv::Mat OpencVPointCloud)
     {
         /*
         *  Function: Get from a Mat to pcl pointcloud datatype
         *  In: cv::Mat
         *  Out: pcl::PointCloud
         */

         //char pr=100, pg=100, pb=100;
         pcl::PointCloud<pcl::PointXYZ>::Ptr point_cloud_ptr(new pcl::PointCloud<pcl::PointXYZ>);//(new pcl::pointcloud<pcl::pointXYZ>);

         for(int i=0;i<OpencVPointCloud.cols;i++)
         {
            //std::cout<<i<<endl;

            pcl::PointXYZ point;
            point.x = OpencVPointCloud.at<float>(0,i);
            point.y = OpencVPointCloud.at<float>(1,i);
            point.z = OpencVPointCloud.at<float>(2,i);

            // when color needs to be added:
            //uint32_t rgb = (static_cast<uint32_t>(pr) << 16 | static_cast<uint32_t>(pg) << 8 | static_cast<uint32_t>(pb));
            //point.rgb = *reinterpret_cast<float*>(&rgb);

            point_cloud_ptr -> points.push_back(point);


         }
         point_cloud_ptr->width = (int)point_cloud_ptr->points.size();
         point_cloud_ptr->height = 1;

         return point_cloud_ptr;

     }

从必须使用在同一代码中创建的图像开始,我不认为应该使用SimpleOpenNIViewer,但我认为我应该从代码中调用cv :: Mat对象(在我的情况下,称为depth_marker); 你能纠正我吗? 非常感谢!

0 个答案:

没有答案