Проблема преобразования cv :: Mat в pcl :: pointcloud - PullRequest
0 голосов
/ 06 мая 2019

Я написал программу, которая выполняет сегментацию изображения: она берет кадр rgb и кадр глубины и объединяет их, получая кадр, в котором видны только мои интересные объекты.Это изображение помещается в объект cv :: Mat.Я должен преобразовать этот cv :: Mat в объект pcl, чтобы увидеть облако точек видимых объектов.

Я следовал руководству, показанному по следующей ссылке:

Какконвертировать cv :: Mat в 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 объект из кода (в моем случае он называется глубиной_маркер); не могли бы вы исправить меня? Большое спасибо!

...