Ask Your Question

Revision history [back]

Not able to create 3D point cloud

I want to convert 2D images to a 3D point cloud data, I have installed OpenCV and PCL libraries in my system. From the bellow link I found some codes to generate point cloud data

but in this code I am getting errors

1st one is The type 'pcl::visualization::PointCloudColorHandlerRGBField' must implement the inherited pure virtual method 'pcl::visualization::PointCloudColorHandler::getColor'

2nd one bit typical Field 'SADWindowSize' could not be resolvedstrong text** Well I used both StereoBM and StereoSGBM but no luck. Please help me out.

Not able to create 3D point cloud

I want to convert 2D images to a 3D point cloud data, I have installed OpenCV and PCL libraries in my system. From the bellow link a post in this website I found some codes to generate point cloud datadata.

but in this But with that code I am getting errors

1st one is The type 'pcl::visualization::PointCloudColorHandlerRGBField' must implement the inherited pure virtual method 'pcl::visualization::PointCloudColorHandler::getColor'

2nd one bit typical Field 'SADWindowSize' could not be resolvedstrong text** Well I used both StereoBM and StereoSGBM but no luck. Please help me out.

Not able to create 3D point cloud

I want to convert 2D images to a 3D point cloud data, I have installed OpenCV and PCL libraries in my system. From a post in this website I found some codes to generate point cloud data.

But with that code I am getting errors

1st one is The type 'pcl::visualization::PointCloudColorHandlerRGBField' must implement the inherited pure virtual method 'pcl::visualization::PointCloudColorHandler::getColor'

2nd one bit typical Field 'SADWindowSize' could not be resolvedstrong text** Well I used both StereoBM and StereoSGBM but no luck. Please help me out.

The code

include "opencv2/core/core.hpp"

include "opencv2/calib3d/calib3d.hpp"

include <opencv2 highgui="" highgui.hpp="">

include <opencv2 imgproc="" imgproc.hpp="">

include "opencv2/contrib/contrib.hpp"

include <cstdio>

include <iostream>

include <fstream>

include "pcl/common/common_headers.h"

include "pcl/io/io.h"

include "pcl/visualization//pcl_visualizer.h"

include <boost thread="" thread.hpp="">

include <pcl io="" pcd_io.h="">

include "pcl/point_cloud.h"

include "pcl/visualization/cloud_viewer.h"

using namespace cv; using namespace std; using namespace pcl;

ofstream out("points.txt");

boost::shared_ptr<pcl::visualization::pclvisualizer> createVisualizer (pcl::PointCloud<pcl::pointxyzrgb>::ConstPtr cloud) { boost::shared_ptr<pcl::visualization::pclvisualizer> viewer (new pcl::visualization::PCLVisualizer ("3D Viewer")); viewer->setBackgroundColor (0, 0, 0); pcl::visualization::PointCloudColorHandlerRGBField<pcl::pointxyzrgb> rgb(cloud); viewer->addPointCloud<pcl::pointxyzrgb> (cloud, rgb, "reconstruction"); //viewer->setPointCloudRenderingProperties (pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "reconstruction"); viewer->addCoordinateSystem ( 1.0 ); viewer->initCameraParameters (); return (viewer); }

int main() { Mat img1, img2; img1 = imread("I1.png"); img2 = imread("I2.png");

Mat g1,g2, disp, disp8;

cvtColor(img1, g1, CV_BGR2GRAY);
cvtColor(img2, g2, CV_BGR2GRAY);

int sadSize = 3;
StereoSGBM *sbm;
sbm->SADWindowSize = sadSize;
sbm->setNumDisparities(144);//144; 128
sbm->setPreFilterCap(10); //63
sbm->setMinDisparity(0);//-39; 0
sbm->setUniquenessRatio(10);
sbm->setSpeckleWindowSize(100);
sbm->setSpeckleRange(32);
sbm->setDisp12MaxDiff(1);
sbm.fullDP = true;
sbm.P1 = sadSize*sadSize*4;
sbm.P2 = sadSize*sadSize*32;
sbm(g1, g2, disp);

normalize(disp, disp8, 0, 255, CV_MINMAX, CV_8U);

Mat dispSGBMscale;
disp.convertTo(dispSGBMscale,CV_32F, 1./16);

double cm1[3][3] = {{8.941981e+02, 0.000000e+00, 6.601406e+02}, {0.000000e+00, 8.927151e+02, 2.611004e+02}, {0.000000e+00, 0.000000e+00, 1.000000e+00}};
double cm2[3][3] = {{8.800704e+02, 0.000000e+00, 6.635881e+02 }, {0.000000e+00, 8.798504e+02, 2.690108e+02}, {0.000000e+00, 0.000000e+00, 1.000000e+00}};
double d1[1][5] = {{ -3.695739e-01, 1.726456e-01, -1.281525e-03, 1.188796e-03, -4.284730e-02}};
double d2[1][5] = {{-3.753454e-01, 1.843265e-01, -1.307069e-03, 2.190397e-03, -4.989103e-02}};

Mat CM1 (3,3, CV_64FC1, cm1);
Mat CM2 (3,3, CV_64FC1, cm2);
Mat D1(1,5, CV_64FC1, d1);
Mat D2(1,5, CV_64FC1, d2);

double r[3][3] = {{9.998381e-01, 1.610234e-02, 8.033237e-03},{-1.588968e-02, 9.995390e-01, -2.586908e-02 },{-8.446087e-03, 2.573724e-02, 9.996331e-01}};
double t[3][4] = {{ -5.706425e-01}, {8.447320e-03}, {1.235975e-02}};

Mat R (3,3, CV_64FC1, r);
Mat T (3,1, CV_64FC1, t);

//Mat   R, T;
Mat R1, R2, T1, T2, Q, P1, P2;

stereoRectify(CM1, D1, CM2, D2, img1.size(), R, T, R1, R2, P1, P2, Q);

Mat points, points1;
reprojectImageTo3D(disp8, points, Q, true);
imshow("points", points);
cvtColor(points, points1, CV_BGR2GRAY);
imshow("points1", points1);

imwrite("disparity.jpg", disp8);
imwrite("points1.jpg", points1);
imwrite("points.jpg", points);


for(int i=0; i<points.rows; ++i)
{
    Point3f* point = points.ptr<Point3f>(i) ;
    for(int j=0; j<points.cols; ++j)
    {
        out<<i<<" "<<j<<"  x: "<<(*point).x<<" y: "<<(*point).y<<" z: "<<(*point).z<<endl;
        ++point;
    }
}

pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud_xyzrgb (new pcl::PointCloud<pcl::PointXYZRGB>);
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_xyz (new pcl::PointCloud<pcl::PointXYZ>);

for (int rows = 0; rows < points.rows; ++rows) {
    for (int cols = 0; cols < points.cols; ++cols) {
        cv::Point3f point = points.at<cv::Point3f>(rows, cols);


        pcl::PointXYZ pcl_point(point.x, point.y, point.z); // normal PointCloud
        pcl::PointXYZRGB pcl_point_rgb;
        pcl_point_rgb.x = point.x;    // rgb PointCloud
        pcl_point_rgb.y = point.y;
        pcl_point_rgb.z = point.z;
        cv::Vec3b intensity = img1.at<cv::Vec3b>(rows,cols); //BGR
        uint32_t rgb = (static_cast<uint32_t>(intensity[2]) << 16 | static_cast<uint32_t>(intensity[1]) << 8 | static_cast<uint32_t>(intensity[0]));
        pcl_point_rgb.rgb = *reinterpret_cast<float*>(&rgb);

        cloud_xyz->push_back(pcl_point);
        cloud_xyzrgb->push_back(pcl_point_rgb);
       }
    }

 std::cout << "saving a pointcloud to out.pcd\n";

////Create visualizer

//boost::shared_ptr<pcl::visualization::pclvisualizer> viewer; //viewer = simpleVis( cloud_xyz );

////Main loop //while ( !viewer->wasStopped()) //{ // viewer->spinOnce(100); // boost::this_thread::sleep (boost::posix_time::microseconds (100000)); //}

visualization::CloudViewer viewer("Simple Cloud Viewer"); viewer.showCloud(cloud_xyzrgb);

waitKey(0);

return 0;

}

Not able to create 3D point cloud

I want to convert 2D images to a 3D point cloud data, I have installed OpenCV and PCL libraries in my system. From a post in this website I found some codes to generate point cloud data.

But with that code I am getting errors

1st one is The type 'pcl::visualization::PointCloudColorHandlerRGBField' must implement the inherited pure virtual method 'pcl::visualization::PointCloudColorHandler::getColor'

2nd one bit typical Field 'SADWindowSize' could not be resolvedstrong text** Well I used both StereoBM and StereoSGBM but no luck. Please help me out.

The code

include "opencv2/core/core.hpp"

include "opencv2/calib3d/calib3d.hpp"

include <opencv2 highgui="" highgui.hpp="">

include <opencv2 imgproc="" imgproc.hpp="">

include "opencv2/contrib/contrib.hpp"

include <cstdio>

include <iostream>

include <fstream>

include "pcl/common/common_headers.h"

include "pcl/io/io.h"

include "pcl/visualization//pcl_visualizer.h"

include <boost thread="" thread.hpp="">

include <pcl io="" pcd_io.h="">

include "pcl/point_cloud.h"

include "pcl/visualization/cloud_viewer.h"

#include "opencv2/core/core.hpp"
#include "opencv2/calib3d/calib3d.hpp"
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include "opencv2/contrib/contrib.hpp"
#include <cstdio>
#include <iostream>
#include <fstream>
#include "pcl/common/common_headers.h"
#include "pcl/io/io.h"
#include "pcl/visualization//pcl_visualizer.h"
#include <boost/thread/thread.hpp>
#include <pcl/io/pcd_io.h>
#include "pcl/point_cloud.h"
#include "pcl/visualization/cloud_viewer.h"

using namespace cv;
using namespace std;
using namespace pcl;

pcl; ofstream out("points.txt");

boost::shared_ptr<pcl::visualization::pclvisualizer> out("points.txt"); boost::shared_ptr<pcl::visualization::PCLVisualizer> createVisualizer (pcl::PointCloud<pcl::pointxyzrgb>::ConstPtr (pcl::PointCloud<pcl::PointXYZRGB>::ConstPtr cloud) { boost::shared_ptr<pcl::visualization::pclvisualizer> boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer (new pcl::visualization::PCLVisualizer ("3D Viewer")); viewer->setBackgroundColor (0, 0, 0); pcl::visualization::PointCloudColorHandlerRGBField<pcl::pointxyzrgb> pcl::visualization::PointCloudColorHandlerRGBField<pcl::PointXYZRGB> rgb(cloud); viewer->addPointCloud<pcl::pointxyzrgb> viewer->addPointCloud<pcl::PointXYZRGB> (cloud, rgb, "reconstruction"); //viewer->setPointCloudRenderingProperties (pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "reconstruction"); viewer->addCoordinateSystem ( 1.0 ); viewer->initCameraParameters (); return (viewer); }

} int main() { Mat img1, img2; img1 = imread("I1.png"); img2 = imread("I2.png");

imread("I2.png");
Mat g1,g2, disp, disp8;
cvtColor(img1, g1, CV_BGR2GRAY);
cvtColor(img2, g2, CV_BGR2GRAY);
int sadSize = 3;
StereoSGBM *sbm;
sbm->SADWindowSize = sadSize;
sbm->setNumDisparities(144);//144; 128
sbm->setPreFilterCap(10); //63
sbm->setMinDisparity(0);//-39; 0
sbm->setUniquenessRatio(10);
sbm->setSpeckleWindowSize(100);
sbm->setSpeckleRange(32);
sbm->setDisp12MaxDiff(1);
sbm.fullDP = true;
sbm.P1 = sadSize*sadSize*4;
sbm.P2 = sadSize*sadSize*32;
sbm(g1, g2, disp);
normalize(disp, disp8, 0, 255, CV_MINMAX, CV_8U);
Mat dispSGBMscale;
disp.convertTo(dispSGBMscale,CV_32F, 1./16);
double cm1[3][3] = {{8.941981e+02, 0.000000e+00, 6.601406e+02}, {0.000000e+00, 8.927151e+02, 2.611004e+02}, {0.000000e+00, 0.000000e+00, 1.000000e+00}};
double cm2[3][3] = {{8.800704e+02, 0.000000e+00, 6.635881e+02 }, {0.000000e+00, 8.798504e+02, 2.690108e+02}, {0.000000e+00, 0.000000e+00, 1.000000e+00}};
double d1[1][5] = {{ -3.695739e-01, 1.726456e-01, -1.281525e-03, 1.188796e-03, -4.284730e-02}};
double d2[1][5] = {{-3.753454e-01, 1.843265e-01, -1.307069e-03, 2.190397e-03, -4.989103e-02}};
Mat CM1 (3,3, CV_64FC1, cm1);
Mat CM2 (3,3, CV_64FC1, cm2);
Mat D1(1,5, CV_64FC1, d1);
Mat D2(1,5, CV_64FC1, d2);
double r[3][3] = {{9.998381e-01, 1.610234e-02, 8.033237e-03},{-1.588968e-02, 9.995390e-01, -2.586908e-02 },{-8.446087e-03, 2.573724e-02, 9.996331e-01}};
double t[3][4] = {{ -5.706425e-01}, {8.447320e-03}, {1.235975e-02}};
Mat R (3,3, CV_64FC1, r);
Mat T (3,1, CV_64FC1, t);
//Mat R, T;
Mat R1, R2, T1, T2, Q, P1, P2;
stereoRectify(CM1, D1, CM2, D2, img1.size(), R, T, R1, R2, P1, P2, Q);
Mat points, points1;
reprojectImageTo3D(disp8, points, Q, true);
imshow("points", points);
cvtColor(points, points1, CV_BGR2GRAY);
imshow("points1", points1);
imwrite("disparity.jpg", disp8);
imwrite("points1.jpg", points1);
imwrite("points.jpg", points);
for(int i=0; i<points.rows; ++i)
{
Point3f* point = points.ptr<Point3f>(i) ;
for(int j=0; j<points.cols; ++j)
{
out<<i<<" "<<j<<" x: "<<(*point).x<<" y: "<<(*point).y<<" z: "<<(*point).z<<endl;
++point;
}
}
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud_xyzrgb (new pcl::PointCloud<pcl::PointXYZRGB>);
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_xyz (new pcl::PointCloud<pcl::PointXYZ>);
for (int rows = 0; rows < points.rows; ++rows) {
for (int cols = 0; cols < points.cols; ++cols) {
cv::Point3f point = points.at<cv::Point3f>(rows, cols);
pcl::PointXYZ pcl_point(point.x, point.y, point.z); // normal PointCloud
pcl::PointXYZRGB pcl_point_rgb;
pcl_point_rgb.x = point.x; // rgb PointCloud
pcl_point_rgb.y = point.y;
pcl_point_rgb.z = point.z;
cv::Vec3b intensity = img1.at<cv::Vec3b>(rows,cols); //BGR
uint32_t rgb = (static_cast<uint32_t>(intensity[2]) << 16 | static_cast<uint32_t>(intensity[1]) << 8 | static_cast<uint32_t>(intensity[0]));
pcl_point_rgb.rgb = *reinterpret_cast<float*>(&rgb);
cloud_xyz->push_back(pcl_point);
cloud_xyzrgb->push_back(pcl_point_rgb);
}
}
std::cout << "saving a pointcloud to out.pcd\n";
////Create visualizer

//boost::shared_ptr<pcl::visualization::pclvisualizer> //boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer; //viewer = simpleVis( cloud_xyz );

); ////Main loop //while ( !viewer->wasStopped()) //{ // viewer->spinOnce(100); // boost::this_thread::sleep (boost::posix_time::microseconds (100000)); //}

//} visualization::CloudViewer viewer("Simple Cloud Viewer"); viewer.showCloud(cloud_xyzrgb);

viewer.showCloud(cloud_xyzrgb);
waitKey(0);
 return 0;

}

Not able to create 3D point cloud

I want to convert 2D images to a 3D point cloud data, I have installed OpenCV and PCL libraries in my system. From a post in this website I found some codes to generate point cloud data.

But with that code I am getting errors

1st one is The type 'pcl::visualization::PointCloudColorHandlerRGBField' must implement the inherited pure virtual method 'pcl::visualization::PointCloudColorHandler::getColor'

2nd one bit typical Field 'SADWindowSize' could not be resolvedstrong text** Well I used both StereoBM and StereoSGBM but no luck. Please help me out.

The code code:

#include "opencv2/core/core.hpp"
#include "opencv2/calib3d/calib3d.hpp"
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include "opencv2/contrib/contrib.hpp"
#include <cstdio>
#include <iostream>
#include <fstream>
#include "pcl/common/common_headers.h"
#include "pcl/io/io.h"
#include "pcl/visualization//pcl_visualizer.h"
#include <boost/thread/thread.hpp>
#include <pcl/io/pcd_io.h>
#include "pcl/point_cloud.h"
#include "pcl/visualization/cloud_viewer.h"

using namespace cv;
using namespace std;
using namespace pcl;

 ofstream out("points.txt");

boost::shared_ptr<pcl::visualization::PCLVisualizer> createVisualizer (pcl::PointCloud<pcl::PointXYZRGB>::ConstPtr cloud)
{
  boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer (new pcl::visualization::PCLVisualizer ("3D Viewer"));
  viewer->setBackgroundColor (0, 0, 0);
  pcl::visualization::PointCloudColorHandlerRGBField<pcl::PointXYZRGB> rgb(cloud);
  viewer->addPointCloud<pcl::PointXYZRGB> (cloud, rgb, "reconstruction");
  //viewer->setPointCloudRenderingProperties (pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "reconstruction");
  viewer->addCoordinateSystem ( 1.0 );
  viewer->initCameraParameters ();
  return (viewer);
}

int main()
{
  Mat img1, img2;
 img1 = imread("I1.png");
 img2 = imread("I2.png");

 Mat g1,g2, disp, disp8;

 cvtColor(img1, g1, CV_BGR2GRAY);
 cvtColor(img2, g2, CV_BGR2GRAY);

 int sadSize = 3;
 StereoSGBM *sbm;
 sbm->SADWindowSize = sadSize;
 sbm->setNumDisparities(144);//144; 128
 sbm->setPreFilterCap(10); //63
 sbm->setMinDisparity(0);//-39; 0
 sbm->setUniquenessRatio(10);
 sbm->setSpeckleWindowSize(100);
 sbm->setSpeckleRange(32);
 sbm->setDisp12MaxDiff(1);
 sbm.fullDP = true;
 sbm.P1 = sadSize*sadSize*4;
 sbm.P2 = sadSize*sadSize*32;
 sbm(g1, g2, disp);

 normalize(disp, disp8, 0, 255, CV_MINMAX, CV_8U);

 Mat dispSGBMscale;
 disp.convertTo(dispSGBMscale,CV_32F, 1./16);

 double cm1[3][3] = {{8.941981e+02, 0.000000e+00, 6.601406e+02}, {0.000000e+00, 8.927151e+02, 2.611004e+02}, {0.000000e+00, 0.000000e+00, 1.000000e+00}};
 double cm2[3][3] = {{8.800704e+02, 0.000000e+00, 6.635881e+02 }, {0.000000e+00, 8.798504e+02, 2.690108e+02}, {0.000000e+00, 0.000000e+00, 1.000000e+00}};
 double d1[1][5] = {{ -3.695739e-01, 1.726456e-01, -1.281525e-03, 1.188796e-03, -4.284730e-02}};
 double d2[1][5] = {{-3.753454e-01, 1.843265e-01, -1.307069e-03, 2.190397e-03, -4.989103e-02}};

 Mat CM1 (3,3, CV_64FC1, cm1);
 Mat CM2 (3,3, CV_64FC1, cm2);
 Mat D1(1,5, CV_64FC1, d1);
 Mat D2(1,5, CV_64FC1, d2);

 double r[3][3] = {{9.998381e-01, 1.610234e-02, 8.033237e-03},{-1.588968e-02, 9.995390e-01, -2.586908e-02 },{-8.446087e-03, 2.573724e-02, 9.996331e-01}};
 double t[3][4] = {{ -5.706425e-01}, {8.447320e-03}, {1.235975e-02}};

 Mat R (3,3, CV_64FC1, r);
 Mat T (3,1, CV_64FC1, t);

 //Mat   R, T;
 Mat R1, R2, T1, T2, Q, P1, P2;

 stereoRectify(CM1, D1, CM2, D2, img1.size(), R, T, R1, R2, P1, P2, Q);

 Mat points, points1;
 reprojectImageTo3D(disp8, points, Q, true);
 imshow("points", points);
 cvtColor(points, points1, CV_BGR2GRAY);
 imshow("points1", points1);

 imwrite("disparity.jpg", disp8);
 imwrite("points1.jpg", points1);
 imwrite("points.jpg", points);


 for(int i=0; i<points.rows; ++i)
 {
     Point3f* point = points.ptr<Point3f>(i) ;
     for(int j=0; j<points.cols; ++j)
     {
         out<<i<<" "<<j<<"  x: "<<(*point).x<<" y: "<<(*point).y<<" z: "<<(*point).z<<endl;
         ++point;
     }
 }

 pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud_xyzrgb (new pcl::PointCloud<pcl::PointXYZRGB>);
 pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_xyz (new pcl::PointCloud<pcl::PointXYZ>);

 for (int rows = 0; rows < points.rows; ++rows) {
     for (int cols = 0; cols < points.cols; ++cols) {
         cv::Point3f point = points.at<cv::Point3f>(rows, cols);


         pcl::PointXYZ pcl_point(point.x, point.y, point.z); // normal PointCloud
         pcl::PointXYZRGB pcl_point_rgb;
         pcl_point_rgb.x = point.x;    // rgb PointCloud
         pcl_point_rgb.y = point.y;
         pcl_point_rgb.z = point.z;
         cv::Vec3b intensity = img1.at<cv::Vec3b>(rows,cols); //BGR
         uint32_t rgb = (static_cast<uint32_t>(intensity[2]) << 16 | static_cast<uint32_t>(intensity[1]) << 8 | static_cast<uint32_t>(intensity[0]));
         pcl_point_rgb.rgb = *reinterpret_cast<float*>(&rgb);

         cloud_xyz->push_back(pcl_point);
         cloud_xyzrgb->push_back(pcl_point_rgb);
        }
     }

  std::cout << "saving a pointcloud to out.pcd\n";

 ////Create visualizer
  //boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer;
  //viewer = simpleVis( cloud_xyz );

  ////Main loop
  //while ( !viewer->wasStopped())
  //{
  //  viewer->spinOnce(100);
  //  boost::this_thread::sleep (boost::posix_time::microseconds (100000));
  //}

   visualization::CloudViewer viewer("Simple Cloud Viewer");
   viewer.showCloud(cloud_xyzrgb);

    waitKey(0);

    return 0;
}

}