【opencv】viz 3D虚拟空间模块编译及使用

版本: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;  
}  






猜你喜欢

转载自blog.csdn.net/qq_15947787/article/details/79225845