学习目标

这次学习中将学会下面三部分:

  • 添加一些部件到可视化窗口
  • 使用Affine3设置部件的姿势
  • 部件沿轴旋转与平移

代码

#include <opencv2/viz.hpp>
#include <opencv2/calib3d.hpp>
#include <iostream>
using namespace cv;
using namespace std;
static void help()
{cout<< "--------------------------------------------------------------------------"   << endl<< "This program shows how to visualize a cube rotated around (1,1,1) and shifted "<< "using Rodrigues vector."                                                      << endl<< "Usage:"                                                                       << endl<< "./widget_pose"                                                                << endl<< endl;
}
int main()
{help();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) += CV_PI * 0.01f;rot_vec.at<float>(0,1) += CV_PI * 0.01f;rot_vec.at<float>(0,2) += CV_PI * 0.01f;translation_phase += 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;
}

解释

  • 创建一个可视化窗口
viz::Viz3d myWindow("Coordinate Frame");
  • 使用CoordinateSystemWidget在窗口中显示坐标轴
myWindow.showWidget("Coordinate Widget", viz::WCoordinateSystem());
  • 展示一条线,这条线代表轴(1,1,1)
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);
  • 创建一个旋转矩阵
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);
  • 使用wasStopped和spinOnce对旋转进行动画处理
while(!myWindow.wasStopped())
{...myWindow.spinOnce(1, true);
}

结果

OpenCV的viz库学习(一)相关推荐

  1. OpenCV与AIPCV库——学习笔记(一)

    本专题是学习Algorithms for Image Processing and Computer Vision的笔记. AIPCV是书名的缩写. 使用OpenCV时,需要了解的关键细节是数据结构的 ...

  2. OpenCV的viz库学习(二)

    学习目标 这次学习中将学会下面三部分: 如何使用makeTransformToGlobal计算位姿 如何使用makeCameraPose和Viz3d :: setViewerPose 如何通过轴和视锥 ...

  3. 利用OpenCV实现基于深度学习的超分辨率处理

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 OpenCV是一个非常强大的计算机视觉处理的工具库.很多小伙伴在入 ...

  4. 库编译:opencv 交叉编译静态库

    opencv 交叉编译静态库 一 概述 二 下载 opencv 三 编译 1 安装Opencv依赖环境 2 安装Cmake 3 运行Camke 配置opencv编译项 (1) 新建 build 文件夹 ...

  5. opencv动态目标跟踪学习总结

    用opencv实现对视频中动态目标的追踪 第一步,是要建立一个编程环境,然后加载opencv的库路径等等.具体步骤在 http://www.opencv.org.cn/ 的"安装" ...

  6. 图像工程课程设计 基于 OpenCV 、 Qt 库实现的图像处理软件 大学编程作业(TUST 天津科技大学 2023年)

    基于 OpenCV . Qt 库实现的图像处理软件 目录 基于 OpenCV . Qt 库实现的图像处理软件 一.项目简介 二.项目要求 三.项目源码 四.交流学习 图像处理工具说明文档 基于 Ope ...

  7. 《PCL点云库学习VS2010(X64)》Part 37 FLANN——快速最近邻搜索库

    <PCL点云库学习&VS2010(X64)>Part 37 FLANN--快速最近邻搜索库 一.介绍 该算法库在OpenCV和PCL等开源库中应用较广,是PCL的默认安装库之一.与 ...

  8. Py之cv2:cv2(OpenCV,opencv-python)库的简介、安装、使用方法(常见函数、图像基本运算等)最强详细攻略

    Py之cv2:cv2(OpenCV,opencv-python)库的简介.安装.使用方法(常见函数.图像基本运算等)最强详细攻略 目录 cv2(OpenCV,opencv-python)库的简介 1. ...

  9. 【libevent】libevent库学习总结(一)——基础

    libevent库学习总结(一)--基础 一.基础 1.1. 介绍 Libevent是一个用于开发可伸缩网络服务器的事件通知库.Libevent API提供了一种机制来执行回调函数,当某个特定事件发生 ...

最新文章

  1. 算法导论中求解时间复杂度的三种方法
  2. SAP-ABAP程序发送邮件
  3. Apache应用实例:建立yum服务器
  4. 在html标签中写三元运算符,如何在剃须刀中使用三元运算符(特别是在HTML属性上)?...
  5. 数据库(5)SQL约束
  6. Oracle数据库迁移:异构传输表空间TTS HP-UX迁移至Redhat Linux 7.7
  7. Win2003远程桌面报错:RPC错误 解决办法
  8. 移动设备尚未形成DDoS的3个原因
  9. declare-styleable中format详解
  10. 两台笔记本用wifi建立局域网_无线通信技术——WiFi
  11. 淄博联海城企业文件图纸数据信息透明加密系统
  12. COSNET: Connecting Heterogeneous Social Networks with Local and Global Consistency 论文阅读笔记
  13. Excel-VBA 快速上手(三、数组和字典)
  14. oracle 金,炼数成金深入Oracle视频课程
  15. HDU——2546 饭卡
  16. 软件工程之软件开发和软件测试模型
  17. Java批量导出word压缩后的zip文件
  18. Android 手游聚合SDK那些事
  19. 史上最全的LTspice安装教程
  20. greendao出现Failed to change locale for db ‘/data/data/xxx/databases/xxx.db‘ to ‘zh_CN‘.

热门文章

  1. python写名字-python写心形名字
  2. 高德地图定位demo
  3. html中表格实现在页面居中显示,html中怎么把表格居中
  4. 如何在家利用网络副业赚钱,这三个网上副业,做好比主业更好
  5. 12. Spring Boot统一日志框架
  6. 网站备案其实是服务器备案,国内服务器为什么需要备案?国外服务器备案吗?
  7. 微信小程序设置字体无效_微信小程序字体设置
  8. 粒子群算法的matlab实现(一)
  9. 你不知道的 Canvas 表格交互
  10. 电脑按Shift+Delete删除了文件该如何恢复?