ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

PCL双目视觉stereo

2021-11-30 09:02:00  阅读:225  来源: 互联网

标签:stereo PCL 双目 viewer pcd pcl cloud left


介绍:双目视觉
有三个相关的算法;
pcl::GrayStereoMatching stereo;
pcl::AdaptiveCostSOStereoMatching stereo;
pcl::BlockBasedStereoMatching stereo;
第一个是根据灰度图像,后两个RGB图像
本例程需要两张同一场景,不同视角的RGB图像,代码如下:

#include <pcl/stereo/stereo_matching.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/visualization/image_viewer.h>

#include <pcl/io/pcd_io.h>

/** \brief Stereo Matching demo
  *
  * This demo loads a stereo image pair and computes the disparity map and related organized point cloud
  * using the PCL AdaptiveCost-2SO Stereo Matching algorithm or the PCL Block-based stereo matching algorithm (you have to comment it out, see the code)
  * Input pcds should be "stereo_left.pcd" and "stereo_right.pcd" which can be found in the test subfolder within trunk.
  * A rescaled version of the disparity map is displayed, as well as the point cloud.
  *
  * \author Federico Tombari (federico.tombari@unibo.it)
  * \ingroup stereo
  */

int 
main(int argc, char **argv)
{

  if (argc < 3)
  {
    std::cerr << "Needs two pcd input files." << std::endl;
    return (-1);
  }

  pcl::PointCloud<pcl::RGB>::Ptr left_cloud (new pcl::PointCloud<pcl::RGB>);
  pcl::PointCloud<pcl::RGB>::Ptr right_cloud (new pcl::PointCloud<pcl::RGB>);

  //Read pcd files
  pcl::PCDReader pcd;
  
  if (pcd.read (argv[1], *left_cloud) == -1)
    return (-1);

  if (pcd.read (argv[2], *right_cloud) == -1)
    return (-1);

  if (!left_cloud->isOrganized () || !right_cloud->isOrganized () || left_cloud->width != right_cloud->width || left_cloud->height != right_cloud->height)
  {
    std::cout << "Wrong stereo pair; please check input pcds .." << std::endl; 
    return 0;
  }

  //choice between the two algorithms:
  //pcl::AdaptiveCostSOStereoMatching stereo;
  pcl::BlockBasedStereoMatching stereo;

  stereo.setMaxDisparity(60);
  stereo.setXOffset(0);
  stereo.setRadius(5);

  //only needed for AdaptiveCostSOStereoMatching:
  //stereo.setSmoothWeak(20);
  //stereo.setSmoothStrong(100);
  //stereo.setGammaC(25);
  //stereo.setGammaS(10);

  stereo.setRatioFilter(20);
  stereo.setPeakFilter(0);

  stereo.setLeftRightCheck(true);
  stereo.setLeftRightCheckThreshold(1);

  stereo.setPreProcessing(true);

  stereo.compute(*left_cloud,  *right_cloud);

  stereo.medianFilter(4);

  pcl::PointCloud<pcl::PointXYZRGB>::Ptr out_cloud( new pcl::PointCloud<pcl::PointXYZRGB> );

  stereo.getPointCloud(318.112200, 224.334900, 368.534700, 0.8387445, out_cloud, left_cloud);

  pcl::PointCloud<pcl::RGB>::Ptr vmap( new pcl::PointCloud<pcl::RGB> );
  stereo.getVisualMap(vmap);

  pcl::visualization::ImageViewer iv ("My viewer");
  iv.addRGBImage<pcl::RGB> (vmap); 
  //iv.addRGBImage<pcl::RGB> (left_cloud);
  //iv.spin (); // press 'q' to exit

  boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer (new pcl::visualization::PCLVisualizer ("3D Viewer"));
  viewer->setBackgroundColor (0, 0, 0);
  
  //viewer->addPointCloud<pcl::PointXYZRGB> (out_cloud, "stereo");
  pcl::visualization::PointCloudColorHandlerRGBField<pcl::PointXYZRGB> intensity(out_cloud);
  viewer->addPointCloud<pcl::PointXYZRGB> (out_cloud, intensity, "stereo");

  //viewer->setPointCloudRenderingProperties (pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "stereo");
  viewer->initCameraParameters ();
  //viewer->spin();
  while (!viewer->wasStopped ())
  {
    viewer->spinOnce (100);
    iv.spinOnce (100); // press 'q' to exit
    boost::this_thread::sleep (boost::posix_time::microseconds (100000));
  }
}

标签:stereo,PCL,双目,viewer,pcd,pcl,cloud,left
来源: https://blog.csdn.net/com1098247427/article/details/120689214

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有