在OpenCV 3D视觉中如果需要显示三维数据或图像就需要用到viz模块,viz是OpenCV的3D显示模块,OpenCV官方release版本不包含此模块,需要我们自己cmake编译。

Cmake步骤这里不做详细介绍,主要介绍一下过程中可能遇到的问题:

一、contrib模块路径OPENCV_EXTRA_MODULES_PATH一律用反斜杠‘/’

二、viz模块依赖VTK(Visualization Toolkit),需要下载https://vtk.org/download/并cmake编译,步骤使用默认即可,相对较简单,这里使用最新的8.2.0版本,cmake后生成如下Install文件:

然后在cmake选项中勾选WITH_VTK(OpenCV4.2默认勾选),同时设置VTK_DIR为lib\cmake\vtk-8.2,如下图所示:

三、其他步骤相对简单,先config,在generate,然后生成ALL_BUILD,生成仅用于项目的Install,得到如bin、etc、include、x64文件夹,其中可以看到OpenCV2文件夹下有了viz.hpp,然后看下其他文件如lib/dll是否生成成功,我这里统一封装为opencv_world420.dll/lib

接下来就可以写个demo来测试是否编译成功了,可以自己新建一个工程,配置包含目录、库目录、附加依赖项,然后添加如下测试代码:

// Viz3D.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include "pch.h"#include #include #include #include using namespace cv;using namespace std;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(0, 0) += CV_PI * 0.01f;    rot_vec.at(0, 1) += CV_PI * 0.01f;    rot_vec.at(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;}

运行时注意除了将opencv_world420.dll放到工程目录或加到环境变量,还需要将vtk的bin目录(D:\VTK_Install\bin)加入环境变量才能得到运行结果,上面代码运行结果如下:

动画效果:

当然你也可以显示三维图形类似如下效果:

2 vtk 编译_OpenCV4.2使用viz模块显示3D图像相关推荐

  1. opencv生成3d模型_OpenCV4.2使用viz模块显示3D图像

    在OpenCV 3D视觉中如果需要显示三维数据或图像就需要用到viz模块,viz是OpenCV的3D显示模块,OpenCV官方release版本不包含此模块,需要我们自己cmake编译. Cmake步 ...

  2. 使用opencv的viz模块显示3d点云

    显示激光3d点云一般使用pcl库,这里提供一种新的思路,使用opencv来做显示. 首先需要增加viz头文件 #include <opencv2/viz.hpp> 第一步读取点云数据 in ...

  3. 【转】如何单独编译Android源代码中的模块--不错

    原文网址:http://blog.csdn.net//article/details/6566662/ 第一次下载好Android源代码工程后,我们通常是在Android源代码工程目录下执行make命 ...

  4. Windows10 + VS2015 (Win SDK10)环境下的64位 VTK编译小结

    之前在学习vtk过程中,感觉vtk的编译还是很简单的,基本上不会碰到什么棘手的错误.但是,当我在Win10+VS2015这个环境下配置时,却遇到了麻烦.经过一番折腾之后,终于将vtkbian编译成功了 ...

  5. php ldap 模块,不重新编译为PHP增加LDAP模块的支持

    不重新编译为PHP增加LDAP模块的支持 2018-11-28 安装步骤 1.进入到php安装源码目录 root@vm-199:~/lnmp0.9# cd php-5.3.28root@vm-199: ...

  6. 通过编译php为httpd的模块实现lamp

    简单罗列基础命令,只分享我的想法! 要求:把php编译成为httpd的模块,实现lamp,并且在httpd上面建立两个虚拟机,一个用于PHPAdmin,另外一个实现discuz. 环境:httpd-2 ...

  7. Linux下nginx编译安装,重新添加模块

    Linux下nginx编译安装,重新添加模块 前言:编译完成后的Nginx,当我们需要新的功能模块时,要怎么重新添加呢?可以按照下面的方法试试. 1.查看nginx版本以及编译安装模块 [root@# ...

  8. 如何单独编译Android源代码中的模块

    第一次下载好Android源代码工程后,我们通常是在android源代码工程目录下执行make命令,经过漫长的等待之后,就可以得到Android系统镜像system.img了.以后如果我们修改了And ...

  9. 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验二十七:TFT模块 - 显示

    实验二十七:TFT模块 - 显示 所谓TFT(Thin Film Transistor)就是众多LCD当中,其中一种支持颜色的LCD,相较古老的点阵LCD(12864笑),它可谓高级了.黑金的TFT ...

最新文章

  1. 教育部:建设100+AI特色专业,500万AI人才缺口要补上!
  2. 运城学院数学与计算机系,运城学院数学与信息技术学院.doc
  3. 嵌入式逻辑分析仪SignalTap II 设计范例
  4. 深度学习stride_深度学习圣经“花书”各章摘要与笔记整理
  5. 深入Eureka/Feign/Hystrix原理学习(1)
  6. 享元设计模式coding
  7. [转]WebView长按弹出复制粘贴
  8. myeclipse配置java8_MyEclipse 2017配置Tomcat8
  9. svn判断通过svnkit,获取最新的revision以及判断某个revsion是否存在
  10. html5标签属性大全_html5 文本相关标签
  11. Android之收音机UI实现(转)
  12. python绘制相频特性曲线_python skimage图像处理(二)
  13. 学习python内一般函数知识
  14. 针对2020年市面上短信供应商的对比(8家SMS供应商对比)
  15. 识别速度3.6ms/帧,人像抠图、工业质检、遥感识别,用这一个分割模型就够了
  16. 10-特质-Scala
  17. caffe中的layer
  18. NLP基础知识点:ROUGE
  19. python 中的路径. ./ .. ../的区别
  20. F - Nastya and Door

热门文章

  1. git 创建分支并合并到master 上
  2. java float转换int
  3. 如何更优雅地对接第三方API
  4. C语言计算e1 1/1! 1/2!,c语言程序填空 下面程序是计算sum=1+(1+1/2)+(1+1/2+1/3)+…(1+1/2...
  5. num2cell用法
  6. oracle pl/sql 程序设计 历史笔记整理
  7. easyUI样式之easyui-switchbutton
  8. “睡眠猴子”团队项目及成员介绍
  9. usaco Superprime Rib
  10. 北京工业大学计算机科学与技术学科评估,本次学科评估进步最大学校之一——北京工业大学...