OpenCV4 Viz模块使用学习(二)
第二个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
从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模块使用学习(二)相关推荐
- OpenCV4 Viz模块使用学习(一)
Viz模块时OpenCV用来显示3D点云或图像的模块,需要自己cmake编译,具体步骤可以网上搜搜,需要先cmake编译vtk,然后再cmake oepncv, 使用的时候需要把vtk bin目录加入 ...
- 乐鑫esp8266学习rtos3.0笔记:仅1M flash 的安信可 ESP-01S 模块,如何二次开发?如何对其 OTA 远程升级固件!
本系列博客学习由非官方人员 半颗心脏 潜心所力所写,不做开发板.仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. Esp8266之 搭建开发环境,开始一个" ...
- 深度学习二(Pytorch物体检测实战)
深度学习二(Pytorch物体检测实战) 文章目录 深度学习二(Pytorch物体检测实战) 1.PyTorch基础 1.1.基本数据结构:Tensor 1.1.1.Tensor数据类型 1.1.2. ...
- 开源项目Krita学习(二)
开源项目Krita学习(二) 专有名词记录 nightly版本: 所谓nightly版本,通常是开发者自己维护的一个版本.白天的时候开发者们将各自的修改提交到一个中心代码库,然后在晚上做一次编译得到的 ...
- Elasticsearch 学习(二).实战使用
Elasticsearch 学习(二).实战使用 参考:http://www.passjava.cn/#/01.PassJava/02.PassJava_Architecture/15.Elastic ...
- 计算机应用基础模块三项目二,计算机应用基础 高职计算机大类专业 刁爱军模块三 项目二 海报的制作.pptx...
计算机应用基础 高职计算机大类专业 刁爱军模块三 项目二 海报的制作.pptx (31页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.90 积分 模块 ...
- CBAM(卷积块注意模块)学习笔记
论文地址:https://arxiv.org/abs/1807.06521 一.简介 我们提出了Convolutional Block Attention Module(CBAM), 一个简单而有效的 ...
- Python 模块 UUID 学习使用
Python 模块 UUID 学习使用 一.UUID介绍 UUID: 通用唯一标识符 ( Universally Unique Identifier ), 对于所有的UUID它可以保证在空间和时间上的 ...
- Verilog基础学习二
Verilog基础学习二 文章目录 Verilog基础学习二 一.always 块 1.阻塞性赋值和非阻塞性赋值 二.条件语句 1.if 语句 基本用法 2.避免引入锁存器 3.case 语句 4.c ...
最新文章
- MogoDb的使用及配置
- set,env,和export的区别
- 还在重复造轮子?Java开发人员必知必会的20种常用类库和API
- 路由热备份(HSRP)DynamipsGUI小试牛刀
- centos 7下安装mysql_Centos7下安装MySQL5.7(数据库的最全安装方法)
- Spring Data MongoDB级联保存在DBRef对象上
- Lrc歌词-开发标准 (转)
- python生成范围内随机数_python在一个范围内取随机数的方法是什么
- dmb显示服务器断开连接,dmb联网信息发布系统操作手册企业加强版.docx
- Java\学习——字符串
- input的一些使用方法
- JAVA基础之关键字、保留字和标识符
- Linux下使用QQ
- 网页制作html怎么居中,网页制作中的水平居中和垂直居中解决方法集合
- 曾经的荣誉,偶然被唤醒
- 使用MVC结构计算梯形面积
- Deep Crossing: Web-Scale Modeling without Manually Crafted Combinatorial Features【论文记录】
- 树莓派+android+盒子,用树莓派作电视盒子,安装Android TV系统
- 腾讯云学生服务器官网地址-腾讯云学生服务器如何购买
- 牛客网赛码网 输入输出格式 pythonC++