"how to convert cv::mat to pcl::pointcloud" Code Answer

1

you can do this like:

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;

         }

and also the otherway

 cv::mat mvw_icp::poinxyztomat(pcl::pointcloud<pcl::pointxyz>::ptr point_cloud_ptr){

     cv::mat opencvpointcloud(3, point_cloud_ptr->points.size(), cv_64fc1);
     for(int i=0; i < point_cloud_ptr->points.size();i++){
        opencvpointcloud.at<double>(0,i) = point_cloud_ptr->points.at(i).x;
        opencvpointcloud.at<double>(1,i) = point_cloud_ptr->points.at(i).y;
        opencvpointcloud.at<double>(2,i) = point_cloud_ptr->points.at(i).z;
    }

    return opencvpointcloud;
}
By Mayur Sojitra on July 15 2022

Answers related to “how to convert cv::mat to pcl::pointcloud”

Only authorized users can answer the Search term. Please sign in first, or register a free account.