版本:opencv2.4.9 + vtk6.1.0
1、vtk6.1.0使用cmake编译
下载地址:http://www.vtk.org/files/release/6.1/VTK-6.1.0.zip
打开cmake,设置路径
选择好编译器,然后【Configure】【Generate】【Open Project】即可,分别选择Debug和Release,右键ALL_INSTALL,生成,右键INSTALL,仅用于项目,仅生成INSTALL.
添加环境变量,D:\build_VTK-6.1.0\bin\Debug以及D:\build_VTK-6.1.0\bin\Release到Path中。
2、opencv2.4.9与vtk6.1.0使用cmake编译
下载地址:https://opencv.org/releases.html
打开cmake,设置路径
点击【Configure】,将WITH_VTK打勾,WITH_CUDA去掉勾,再次点击【Configure】,设置VTK_DIR为之前编译好的vtk路径(即VTKConfig.cmake所在路径),再次点击【Configure】,此时可以看到检测到vtk,如下图:
点击【Generate】,然后【Open Project】打开VS工程,选择Release,右键ALL_BUILD,生成,右键INSTALL,仅用于项目,仅生成INSTALL;选择Debug,右键ALL_BUILD,生成,右键INSTALL,仅用于项目,仅生成INSTALL。(去掉WITH_CUDA对勾编译时间大概3-5分钟)
添加环境变量,D:\build_opencv2.4.9_vtk\install\x86\vc11\bin到Path中
为了节省空间,可以删除 除build_opencv2.4.9_vtk\install文件夹之外 的其他文件
3、例程
#include <opencv2/viz/vizcore.hpp>
#include <opencv2/calib3d/calib3d.hpp>
#include <iostream>
using namespace cv;
using namespace std;
/**
* @function main
*/
int main()
{
/// 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);
/// Display widget (update if already displayed)
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) += CV_PI * 0.01f;
rot_vec.at<float>(0, 1) += CV_PI * 0.01f;
rot_vec.at<float>(0, 2) += CV_PI * 0.01f;
/// Shift on (1,1,1)
translation_phase += 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;
}
#include <opencv2/viz/vizcore.hpp>
#include <iostream>
using namespace cv;
using namespace std;
/**
* @function main
*/
int main()
{
/// Create a window
viz::Viz3d myWindow("Viz Demo");
/// Start event loop
myWindow.spin();
/// Event loop is over when pressed q, Q, e, E
cout << "First event loop is over" << endl;
/// Access window via its name
viz::Viz3d sameWindow = viz::getWindowByName("Viz Demo");
/// Start event loop
sameWindow.spin();
/// Event loop is over when pressed q, Q, e, E
cout << "Second event loop is over" << endl;
/// Event loop is over when pressed q, Q, e, E
/// Start event loop once for 1 millisecond
sameWindow.spinOnce(1, true);
while(!sameWindow.wasStopped())
{
/// Interact with window
/// Event loop for 1 millisecond
sameWindow.spinOnce(1, true);
}
/// Once more event loop is stopped
cout << "Last event loop is over" << endl;
return 0;
}