当前位置:   article > 正文

OpenCV模块熟悉:点云处理相关

OpenCV模块熟悉:点云处理相关

        1. 显示--VIZ         

       曾经基于PCL 做过不少点云相关的开发,采样VTK进行有点云显示。后来基于OpenCV做了不少三维重建工作,总是将点云保存下来,然后借助CloudCompare等查看结果。如果能够将VIZ编译进来,预计会提升开发速度。
        在Ubuntu下,VIZ的安装较为简单(珍爱生命,学习就用不要用Windows了)。在编译好OpenCV + Contrib之后(网上很多教程,这里不再赘述)。在build的目录内打开终端,输入下列命令行即可。

//安装VTK

sudo apt-get install libvtk6-dev

//打开vtk,生成及安装

cmake -DWITH_VTK=ON ..

make

sudo make install

//加载配置

ldconfig

         测试VIZ,输入如下代码,测试、运行。

  1. #include <opencv2/viz.hpp>
  2. #include <opencv2/calib3d.hpp>
  3. #include <iostream>
  4. using namespace cv;
  5. using namespace std;
  6. static void help()
  7. {
  8. cout
  9. << "--------------------------------------------------------------------------" << endl
  10. << "This program shows how to visualize a cube rotated around (1,1,1) and shifted "
  11. << "using Rodrigues vector." << endl
  12. << "Usage:" << endl
  13. << "./widget_pose" << endl
  14. << endl;
  15. }
  16. int main()
  17. {
  18. help();
  19. viz::Viz3d myWindow("Coordinate Frame");
  20. myWindow.showWidget("Coordinate Widget", viz::WCoordinateSystem());
  21. viz::WLine axis(Point3f(-1.0f,-1.0f,-1.0f), Point3f(1.0f,1.0f,1.0f));
  22. axis.setRenderingProperty(viz::LINE_WIDTH, 4.0);
  23. myWindow.showWidget("Line Widget", axis);
  24. viz::WCube cube_widget(Point3f(0.5,0.5,0.0), Point3f(0.0,0.0,-0.5), true, viz::Color::blue());
  25. cube_widget.setRenderingProperty(viz::LINE_WIDTH, 4.0);
  26. myWindow.showWidget("Cube Widget", cube_widget);
  27. Mat rot_vec = Mat::zeros(1,3,CV_32F);
  28. float translation_phase = 0.0, translation = 0.0;
  29. rot_vec.at<float>(0, 0) += (float)CV_PI * 0.01f;
  30. rot_vec.at<float>(0, 1) += (float)CV_PI * 0.01f;
  31. rot_vec.at<float>(0, 2) += (float)CV_PI * 0.01f;
  32. translation_phase += (float)CV_PI * 0.01f;
  33. translation = sin(translation_phase);
  34. Mat rot_mat;
  35. Rodrigues(rot_vec, rot_mat);
  36. cout << "rot_mat = " << rot_mat << endl;
  37. Affine3f pose(rot_mat, Vec3f(translation, translation, translation));
  38. Affine3f pose2(pose.matrix);
  39. cout << "pose = " << pose.matrix << endl;
  40. cout << "pose = " << pose2.matrix << endl;
  41. while(!myWindow.wasStopped())
  42. {
  43. /* Rotation using rodrigues */
  44. rot_vec.at<float>(0,0) += (float)CV_PI * 0.01f;
  45. rot_vec.at<float>(0,1) += (float)CV_PI * 0.01f;
  46. rot_vec.at<float>(0,2) += (float)CV_PI * 0.01f;
  47. translation_phase += (float)CV_PI * 0.01f;
  48. translation = sin(translation_phase);
  49. Mat rot_mat1;
  50. Rodrigues(rot_vec, rot_mat1);
  51. Affine3f pose1(rot_mat1, Vec3f(translation, translation, translation));
  52. myWindow.setWidgetPose("Cube Widget", pose1);
  53. myWindow.spinOnce(1, true);
  54. }
  55. return 0;
  56. }

运行上述代码之后,一个运动的正方体框会被展示出来。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/344983
推荐阅读
相关标签
  

闽ICP备14008679号