赞
踩
一、安装环境
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开始配置工程。
配置之后需要做两处修改:
再一次点击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工程中输入源码:
- /**
- * @file widget_pose.cpp
- * @brief Setting pose of a widget
- * @author Ozan Cagri Tonkal
- */
-
-
- #include <opencv2/viz.hpp>
- #include <opencv2/calib3d.hpp>
- #include <iostream>
-
- using namespace cv;
- using namespace std;
-
- /**
- * @function help
- * @brief Display instructions to use this tutorial program
- */
- static void help()
- {
- cout
- << "--------------------------------------------------------------------------" << endl
- << "This program shows how to visualize a cube rotated around (1,1,1) and shifted "
- << "using Rodrigues vector." << endl
- << "Usage:" << endl
- << "./widget_pose" << endl
- << endl;
- }
-
- /**
- * @function main
- */
- int main()
- {
- help();
-
- /// Create a window
- viz::Viz3d myWindow("Coordinate Frame");
-
- /// Add coordinate axes
- myWindow.showWidget("Coordinate Widget", viz::WCoordinateSystem());
-
- /// Add line to represent (1,1,1) axis
- viz::WLine axis(Point3f(-1.0f, -1.0f, -1.0f), Point3f(1.0f, 1.0f, 1.0f));
- axis.setRenderingProperty(viz::LINE_WIDTH, 4.0);
- myWindow.showWidget("Line Widget", axis);
-
- /// Construct a cube widget
- viz::WCube cube_widget(Point3f(0.5, 0.5, 0.0), Point3f(0.0, 0.0, -0.5), true, viz::Color::blue());
- cube_widget.setRenderingProperty(viz::LINE_WIDTH, 4.0);
- myWindow.showWidget("Cube Widget", cube_widget);
-
- /// Rodrigues vector
- Mat rot_vec = Mat::zeros(1, 3, CV_32F);
- float translation_phase = 0.0, translation = 0.0;
- while (!myWindow.wasStopped())
- {
- /* Rotation using rodrigues */
- /// Rotate around (1,1,1)
- rot_vec.at<float>(0, 0) += (float)CV_PI * 0.01f;
- rot_vec.at<float>(0, 1) += (float)CV_PI * 0.01f;
- rot_vec.at<float>(0, 2) += (float)CV_PI * 0.01f;
-
- /// Shift on (1,1,1)
- translation_phase += (float)CV_PI * 0.01f;
- translation = sin(translation_phase);
-
- Mat rot_mat;
- Rodrigues(rot_vec, rot_mat);
-
- /// Construct pose
- Affine3f pose(rot_mat, Vec3f(translation, translation, translation));
-
- myWindow.setWidgetPose("Cube Widget", pose);
-
- myWindow.spinOnce(1, true);
- }
-
- return 0;
- }
编译调试没有错误的话会出现界面:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。