当前位置:   article > 正文

OpenCV3历程(11)——OpenCV4.1.0中opencv_contrib4.1.0和VIZ8.2.0模块的安装_opencv4.0.0 viz安装

opencv4.0.0 viz安装

一、安装环境

Windows 10 64位、VS2017

二、安装准备

GitHub下载可能会很慢或者下载失败,我已经将各文件上传至csdn:https://download.csdn.net/download/m0_37350758/11153525

三、VTK-8.2.0安装步骤

1.使用CMAKE生成可用VS2017编译的VTK的工程文件

(1)打开CMkae,点击 Browse Sourse 按钮选择下载好的VTK710源码。(本例中代码位于D:/Softwore/VTK/VTK-8.2.0

(2)手动新建一个build文件夹用来存放生成的工程。(本例中位于D:/Softwore/VTK/VTK-8.2.0/build

(3)在CMake中,点击 Browse Build 按钮,选择新建的build目录。(本例中位于D:/Softwore/VTK/VTK-8.2.0/build

然后点击 Configure按钮,弹出的编译器选择窗口,本例中选择vs2017  x64位,点击Finish开始配置工程。

Configure完成之后我们需要确认下图中五项是勾选上的,没有勾选的手动勾选上。

确认之后再一次configure,然后generate,然后先使用管理员权限打开VS2017,在里面打开生成的VTK解决方案!

在解决方案资源管理器中右键点击ALL BUILD并点击生成进行编译。

这个过程可能时间比较久(记得用管理员权限打开),可以冲杯咖啡喝喝!

编译完成之后编译完成之后右键点击INSTALL,并点击Project Only,点击Project Only INSTALL
整个过程完成之后,你已经完成了VTK820在Windows上的编译和安装(编译和INSTALL在debug和release两个模式下都要操作一遍,否则在后面编译OpenCV时可能会有错误)。

 四、编译OpenCV4.1.0和OpenCV contrib源码

基本步骤类似于第三步,新启动一个CMake-gui。并建立一个build4.1.0目录。(本例位于D:\Softwore\OpenCV-4.1.0
Browse Sourse选择D:\Softwore\OpenCV-4.1.0\opencv-4.1.0
Browse Build选择D:\Softwore\OpenCV-4.1.0\build4.1.0
点击Configure按钮,弹出的编译器选择窗口,本例中选择vs2017  x64位,点击Finish开始配置工程。

配置之后需要做两处修改:

  • OPENCV_EXTRA_MOULES_PATH设置为D:/Softwore/OpenCV-4.1.0/opencv_contrib-4.1.0/modules
  • VTK_DIR目录配置为D:/Softwore/VTK/VTK-8.2.0/build

                             

 再一次点击Configure按钮,针对修改项进行配置。

然后点击Generate按钮,生成Visual Studio可编译的工程。

然后先使用管理员权限打开VS2017,在里面打开生成的OpenCV解决方案。

 之后操作类似于VTK编译步骤,右键点击ALL BUILD并点击build进行编译(同样时间可能会比较久),待编译完成之后,同样的,编译完成之后右键点击INSTALL,并点击Project Only,点击Project Only INSTALL编译和INSTALL在debug和release两个模式下都要操作一遍)整个过程完成之后,你已经完成了OpenCV410+OpenCV contrib410+Viz820模块在Windows上的编译和安装。

五、测试

在D:\Softwore\OpenCV-4.1.0\build4.1.0\install\include\opencv2\viz文件夹下会看到:

 之后在VS2017中新建OpenCV工程,并配置开发环境:

在属性表中VC++目录下的包含目录和库目录:

 

 在属性表——链接器——输入——附加依赖项(添加D:\Softwore\OpenCV-4.1.0\build4.1.0\install\x64\vc15\lib文件夹下所有.lib文件):

VTK和OpenCV自己带的许多.dll,需要放到PATH能够找到的地方,这里可以放在C:\Windows\SysWOW64和C:\Windows\System32中

之后在vs工程中输入源码:

  1. /**
  2. * @file widget_pose.cpp
  3. * @brief Setting pose of a widget
  4. * @author Ozan Cagri Tonkal
  5. */
  6. #include <opencv2/viz.hpp>
  7. #include <opencv2/calib3d.hpp>
  8. #include <iostream>
  9. using namespace cv;
  10. using namespace std;
  11. /**
  12. * @function help
  13. * @brief Display instructions to use this tutorial program
  14. */
  15. static void help()
  16. {
  17. cout
  18. << "--------------------------------------------------------------------------" << endl
  19. << "This program shows how to visualize a cube rotated around (1,1,1) and shifted "
  20. << "using Rodrigues vector." << endl
  21. << "Usage:" << endl
  22. << "./widget_pose" << endl
  23. << endl;
  24. }
  25. /**
  26. * @function main
  27. */
  28. int main()
  29. {
  30. help();
  31. /// Create a window
  32. viz::Viz3d myWindow("Coordinate Frame");
  33. /// Add coordinate axes
  34. myWindow.showWidget("Coordinate Widget", viz::WCoordinateSystem());
  35. /// Add line to represent (1,1,1) axis
  36. viz::WLine axis(Point3f(-1.0f, -1.0f, -1.0f), Point3f(1.0f, 1.0f, 1.0f));
  37. axis.setRenderingProperty(viz::LINE_WIDTH, 4.0);
  38. myWindow.showWidget("Line Widget", axis);
  39. /// Construct a cube widget
  40. viz::WCube cube_widget(Point3f(0.5, 0.5, 0.0), Point3f(0.0, 0.0, -0.5), true, viz::Color::blue());
  41. cube_widget.setRenderingProperty(viz::LINE_WIDTH, 4.0);
  42. myWindow.showWidget("Cube Widget", cube_widget);
  43. /// Rodrigues vector
  44. Mat rot_vec = Mat::zeros(1, 3, CV_32F);
  45. float translation_phase = 0.0, translation = 0.0;
  46. while (!myWindow.wasStopped())
  47. {
  48. /* Rotation using rodrigues */
  49. /// Rotate around (1,1,1)
  50. rot_vec.at<float>(0, 0) += (float)CV_PI * 0.01f;
  51. rot_vec.at<float>(0, 1) += (float)CV_PI * 0.01f;
  52. rot_vec.at<float>(0, 2) += (float)CV_PI * 0.01f;
  53. /// Shift on (1,1,1)
  54. translation_phase += (float)CV_PI * 0.01f;
  55. translation = sin(translation_phase);
  56. Mat rot_mat;
  57. Rodrigues(rot_vec, rot_mat);
  58. /// Construct pose
  59. Affine3f pose(rot_mat, Vec3f(translation, translation, translation));
  60. myWindow.setWidgetPose("Cube Widget", pose);
  61. myWindow.spinOnce(1, true);
  62. }
  63. return 0;
  64. }

编译调试没有错误的话会出现界面:

 

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

闽ICP备14008679号