第二个demo如下,目标:

  • 将小部件添加到可视化窗口
  • 使用Affine3设置小部件的姿势
  • 沿轴旋转和平移窗口小部件
#include <opencv2/viz.hpp>
#include <opencv2/calib3d.hpp>
#include <iostream>
using namespace cv;
using namespace std;int main()
{viz::Viz3d myWindow("Coordinate Frame");myWindow.showWidget("Coordinate Widget", viz::WCoordinateSystem());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);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);Mat rot_vec = Mat::zeros(1, 3, CV_32F);float translation_phase = 0.0, translation = 0.0;while (!myWindow.wasStopped()){/* Rotation using rodrigues */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;translation_phase += (float)CV_PI * 0.01f;translation = sin(translation_phase);Mat rot_mat;Rodrigues(rot_vec, rot_mat);Affine3f pose(rot_mat, Vec3f(translation, translation, translation));myWindow.setWidgetPose("Cube Widget", pose);myWindow.spinOnce(1, true);}return 0;
}

使用CoordinateSystemWidget在窗口中显示坐标轴。

myWindow.showWidget(“ Coordinate Widget”,viz :: WCoordinateSystem());

显示代表轴(1,1,1)的线,在坐标系画一条线,指定起点和终点,线宽4.0

viz :: WLine轴(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);
构造一个立方体,最小点,最大点,线宽,颜色。

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矢量创建旋转矩阵

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;

...

Mat rot_mat;

Rodrigues(rot_vec, rot_mat);

使用Affine3f设置立方体的位置

Affine3f pose(rot_mat, Vec3f(translation, translation, translation));

myWindow.setWidgetPose("Cube Widget", pose);

然后就是显示了,是一个立方体旋转的动画效果,这时候就要注意while循环中的myWindow.spinOnce(1, true)的妙用了

https://youtu.be/22HKMN657U0?t=3

OpenCV4 Viz模块使用学习(二)相关推荐

  1. OpenCV4 Viz模块使用学习(一)

    Viz模块时OpenCV用来显示3D点云或图像的模块,需要自己cmake编译,具体步骤可以网上搜搜,需要先cmake编译vtk,然后再cmake oepncv, 使用的时候需要把vtk bin目录加入 ...

  2. 乐鑫esp8266学习rtos3.0笔记:仅1M flash 的安信可 ESP-01S 模块,如何二次开发?如何对其 OTA 远程升级固件!

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,不做开发板.仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. Esp8266之 搭建开发环境,开始一个" ...

  3. 深度学习二(Pytorch物体检测实战)

    深度学习二(Pytorch物体检测实战) 文章目录 深度学习二(Pytorch物体检测实战) 1.PyTorch基础 1.1.基本数据结构:Tensor 1.1.1.Tensor数据类型 1.1.2. ...

  4. 开源项目Krita学习(二)

    开源项目Krita学习(二) 专有名词记录 nightly版本: 所谓nightly版本,通常是开发者自己维护的一个版本.白天的时候开发者们将各自的修改提交到一个中心代码库,然后在晚上做一次编译得到的 ...

  5. Elasticsearch 学习(二).实战使用

    Elasticsearch 学习(二).实战使用 参考:http://www.passjava.cn/#/01.PassJava/02.PassJava_Architecture/15.Elastic ...

  6. 计算机应用基础模块三项目二,计算机应用基础 高职计算机大类专业 刁爱军模块三 项目二 海报的制作.pptx...

    计算机应用基础 高职计算机大类专业 刁爱军模块三 项目二 海报的制作.pptx (31页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.90 积分 模块 ...

  7. CBAM(卷积块注意模块)学习笔记

    论文地址:https://arxiv.org/abs/1807.06521 一.简介 我们提出了Convolutional Block Attention Module(CBAM), 一个简单而有效的 ...

  8. Python 模块 UUID 学习使用

    Python 模块 UUID 学习使用 一.UUID介绍 UUID: 通用唯一标识符 ( Universally Unique Identifier ), 对于所有的UUID它可以保证在空间和时间上的 ...

  9. Verilog基础学习二

    Verilog基础学习二 文章目录 Verilog基础学习二 一.always 块 1.阻塞性赋值和非阻塞性赋值 二.条件语句 1.if 语句 基本用法 2.避免引入锁存器 3.case 语句 4.c ...

最新文章

  1. MogoDb的使用及配置
  2. set,env,和export的区别
  3. 还在重复造轮子?Java开发人员必知必会的20种常用类库和API
  4. 路由热备份(HSRP)DynamipsGUI小试牛刀
  5. centos 7下安装mysql_Centos7下安装MySQL5.7(数据库的最全安装方法)
  6. Spring Data MongoDB级联保存在DBRef对象上
  7. Lrc歌词-开发标准 (转)
  8. python生成范围内随机数_python在一个范围内取随机数的方法是什么
  9. dmb显示服务器断开连接,dmb联网信息发布系统操作手册企业加强版.docx
  10. Java\学习——字符串
  11. input的一些使用方法
  12. JAVA基础之关键字、保留字和标识符
  13. Linux下使用QQ
  14. 网页制作html怎么居中,网页制作中的水平居中和垂直居中解决方法集合
  15. 曾经的荣誉,偶然被唤醒
  16. 使用MVC结构计算梯形面积
  17. Deep Crossing: Web-Scale Modeling without Manually Crafted Combinatorial Features【论文记录】
  18. 树莓派+android+盒子,用树莓派作电视盒子,安装Android TV系统
  19. 腾讯云学生服务器官网地址-腾讯云学生服务器如何购买
  20. 牛客网赛码网 输入输出格式 pythonC++

热门文章

  1. 这款录屏神器在 GitHub 火了,秒杀 33 种同类工具!
  2. 鼠标手是否算工伤 专家:法定职业病才能获赔
  3. html图片上方产生1像素间隙解决
  4. List<Map,Object>>怎样取出map集合中的某一个的key值?
  5. NOIP2017大总结
  6. Visual Studio 2019编译问题解决方法
  7. 图形测试分析毫无头绪?HarmonyOS图形栈测试技术帮你解决
  8. 疯狂的程序员81:丁骨牛排
  9. 网管技巧:如何修改路由器和交换机的密码
  10. html中p元素添加超链接_如何在HTML中添加超链接