ViSP学习笔记(二):使用CMake编译ViSP工程
开发环境:Ubuntu 18.04 LTS + ROS Melodic + ViSP 3.3.1
文章内容主要参考ViSP官方教学文档:https://visp-doc.inria.fr/doxygen/visp-daily/tutorial_mainpage.html
本文介绍了如何在ubuntu环境下,使用CMake编译一个ViSP工程,本文使用的ViSP工程是官方提供的一个例程。首先要检查VISP_WS环境变量是否存在,如果是使用源码安装的,那工作空间和环境变量就已经配置好了无需执行步骤1,直接到步骤2;如果是通过功能包安装的,那么则需要按照下面的步骤来配置工作空间和环境变量。
1. 检查环境变量是否存在
env | grep VISP_WS
如果上述指令返回为空,则须执行以下指令
echo "export VISP_WS=$HOME/visp-ws" >> ~/.bashrc
source ~/.bashrc
mkdir -p $VISP_WS
2. 使用SVN获取源码
sudo apt-get install subversion
cd $VISP_WS
svn export https://github.com/lagadic/visp.git/trunk/tutorial/image
在这一步骤中,我们其实是利用SVN工具从ViSP的Github中下载了一个名为image的例程,下面对该例程进行编译
3. 创建build文件夹
mkdir -p $VISP_WS/image/build
cd $VISP_WS/image/build
4. 运行CMake
如果你是使用功能包安装的,那就执行以下指令
cmake .. -DCMAKE_BUILD_TYPE=Release
如果你是使用源码安装的,那就执行以下指令
cmake .. -DCMAKE_BUILD_TYPE=Release -DVISP_DIR=$VISP_WS/visp-build
5. 编译tutorial-viewer文件
make tutorial-viewer
6. 运行tutorial-viewer文件
/tutorial-viewer monkey.pgm
运行结果
如果我们打开~/visp_ws/image文件夹,我们会看到有许多的例程文件,如下图所示,而我们上面只是尝试编译了其中一个名为tutorial-viewer.cpp的文件,其余的例程我们会在后面的学习中逐步介绍到。
让我们看一下tutorial-viewer.cpp文件中都写了什么
//! \example tutorial-viewer.cpp
//! [Include display]
#include <visp3/gui/vpDisplayD3D.h> // 添加Direct 3D 头文件,Direct 3D 是一个在windows环境中使用的图像显示工具
#include <visp3/gui/vpDisplayGDI.h> // 添加Graphical Device Interface (GDI) 头文件, GDI 是一个在windows环境中使用的图像显示工具
#include <visp3/gui/vpDisplayGTK.h> // 添加GTK 头文件,GTK 是一个可以跨平台使用的图像显示工具
#include <visp3/gui/vpDisplayOpenCV.h> // 添加OpenCV头文件,OpenCV 是一个可以跨平台使用的图像显示工具
#include <visp3/gui/vpDisplayX.h> // 添加DisplayX 头文件,DisplayX 是一个在类unix环境中使用的图像显示工具,需要安装libX11库文件
//! [Include display]
//! [Include io]
#include <visp3/io/vpImageIo.h> // 添加vpImageIo头文件,其中定义了vpImageIo类,可以从硬盘中读取和写入PGM, PPM, PNG 和 JPEG格式的图片
//! [Include io]int main(int argc, char **argv)
{// 要求在使用该程序时,必须输入一个图片文件的名称,如本例程使用的“monkey.pgm”// 而且这个图像文件必须与编译好的tutorial-viewer在同一文件夹下(~/visp_ws/image/build)if (argc != 2) {printf("Usage: %s <image name.[pgm,ppm,jpeg,png,tiff,bmp,ras,jp2]>\n", argv[0]);return -1;}//! [vpImage construction]vpImage<vpRGBa> I; // 创建一个RGBa格式的图像实例I //! [vpImage construction]//! [vpImage reading]try {vpImageIo::read(I, argv[1]); // 将上述的图片文件读入到图像实例I中} catch (...) {std::cout << "Cannot read image \"" << argv[1] << "\"" << std::endl; //如果图片文件不存在或格式不正确,则会报错return -1;}//! [vpImage reading]try {// 依次使用各种图像显示工具打开实例I,直到有一种工具可用
//! [vpDisplay construction]
#if defined(VISP_HAVE_X11)vpDisplayX d(I, vpDisplay::SCALE_AUTO);
#elif defined(VISP_HAVE_GDI)vpDisplayGDI d(I, vpDisplay::SCALE_AUTO);
#elif defined(VISP_HAVE_OPENCV)vpDisplayOpenCV d(I, vpDisplay::SCALE_AUTO);
#elif defined(VISP_HAVE_GTK)vpDisplayGTK d(I, vpDisplay::SCALE_AUTO);
#elif defined(VISP_HAVE_D3D9)vpDisplayD3D d(I, vpDisplay::SCALE_AUTO);
#elsestd::cout << "No image viewer is available..." << std::endl;//如果上面的所有图像显示工具都无法使用,则会报错
#endif//! [vpDisplay construction]//! [vpDisplay set title]vpDisplay::setTitle(I, "My image"); // 设置图像显示的标题//! [vpDisplay set title]//! [vpDisplay display]vpDisplay::display(I); //显示图像vpDisplay::flush(I); // 与display配合使用//! [vpDisplay display]std::cout << "A click to quit..." << std::endl; // 在终端中输出一句话“A click to quit...”(点击即可退出)//! [vpDisplay get click]vpDisplay::getClick(I); // 等待鼠标点击指令,接到指令后即关闭图像I//! [vpDisplay get click]} catch (const vpException &e) {std::cout << "Catch an exception: " << e << std::endl;}
}
如果大家对于深度学习与计算机视觉领域感兴趣,希望获得更多的知识分享与最新的论文解读,欢迎关注我的个人公众号“深视”。
ViSP学习笔记(二):使用CMake编译ViSP工程相关推荐
- IBatis.Net学习笔记二--下载、编译、运行NPetShop
下载地址:http://ibatis.apache.org/dotnetdownloads.cgi 有最新版的IBastis.Net的源代码等,还有NPetShop的例子(例子比较老) 将NPetSh ...
- ViSP学习笔记(三):新建Visp工程并使用CMake完成编译
开发环境:Unbuntu 18.04 LTS + ROS Melodic + ViSP 3.3.1 文章内容主要参考ViSP官方教学文档:https://visp-doc.inria.fr/doxyg ...
- ViSP学习笔记(二十五):基于图像的视觉伺服
开发环境:Ubuntu 18.04 LTS + ROS Melodic + ViSP 3.3.1 文章内容主要参考ViSP官方教学文档:https://visp-doc.inria.fr/doxyge ...
- ROS学习笔记二:探索ROS文件系统
ROS学习笔记二:探索ROS文件系统 ROS针对自己文件的特性,具有一些自己的工具命令,当针对ROS文件进行操作的时候是非常方便的.这些命令和ubuntu系统原有的命令相似但却不同,单独针对ROS文件 ...
- pythonsze_python学习笔记二 数据类型(基础篇)
Python基础 对于Python,一切事物都是对象,对象基于类创建 不同类型的类可以创造出字符串,数字,列表这样的对象,比如"koka".24.['北京', '上海', '深圳' ...
- 嵌入式系统设计师学习笔记二十八:嵌入式程序设计③——高级程序设计语言
嵌入式系统设计师学习笔记二十八:嵌入式程序设计③--高级程序设计语言 解释程序和编译程序 编译器的工作阶段示意图 语法错误:非法字符,关键字或标识符拼写错误 语法错误:语法结构出错,if--endif ...
- linux学习笔记(五)编译内核模块生成ko驱动文件
系列文章目录 linux学习笔记(五)编译内核模块生成ko驱动文件 文章目录 系列文章目录 前言 一.加载内核简介 二.第一个hello world文件 1.文件树 2.hello.c 3.Makef ...
- NumPy学习笔记 二
NumPy学习笔记 二 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...
- qml学习笔记(二):可视化元素基类Item详解(上半场anchors等等)
原博主博客地址:http://blog.csdn.net/qq21497936 本文章博客地址:http://blog.csdn.net/qq21497936/article/details/7851 ...
- [转载]dorado学习笔记(二)
原文地址:dorado学习笔记(二)作者:傻掛 ·isFirst, isLast在什么情况下使用?在遍历dataset的时候会用到 ·dorado执行的顺序,首先由jsp发送请求,调用相关的ViewM ...
最新文章
- 路由 php mysql_Php 连接 MySQL 的三种方式
- 可逆加密算法 php,php可逆加密的方法及原理
- 分析chrome中的network面板
- Django配置开发环境和生产环境以及配置Jinja2模板引擎
- Excel模板导出之导出教材订购表
- SPOJ LCS 后缀自动机
- windows下编译c语言文件路径,解决JNI在Windows环境下因长路径导致编译失败问题
- 《Total Commander:万能文件管理器》——第9.6节.后记
- 智能优化算法:探路者优化算法-附代码
- Pygame教程系列四:播放音频篇
- 美洽客服报表功能:用数据驱动企业业绩增长
- MATLAB求函数零点与极值
- BASE32编码--记录
- Flutter Sliver滚动组件
- 时值年末,年度CSDN小峯的回顾过去的2020年(推荐)
- 根据图片原型写一个html页面,如何分分钟开发高保真交互原型_html/css_WEB-ITnose
- Es6箭头函数详细用法
- linux如何查看x windows,X windows
- javascript_outline
- 地震--《孩子,快抓紧妈妈的手》
热门文章
- 十大职场潜规则送职场新人
- android l2tp 失败,修理 Android ICS 上那个抽风止不住的 L2TP/IPSec 客户端
- 利用Python调用outlook自动发送邮件
- torch.range()和torch.arange()
- python table_python中table是什么-女性时尚流行美容健康娱乐mv-ida网
- [Common]如何获取手机SN - MTK物联网在线解答 - 技术论坛
- 秀姿势(sugata)
- 索引的类型分类、区别、优缺点
- python贝叶斯分类器_朴素贝叶斯分类器的简单Python实现
- 血杀英雄为什么不显示服务器,血杀英雄元素系统玩法介绍