开发环境: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工程相关推荐

  1. IBatis.Net学习笔记二--下载、编译、运行NPetShop

    下载地址:http://ibatis.apache.org/dotnetdownloads.cgi 有最新版的IBastis.Net的源代码等,还有NPetShop的例子(例子比较老) 将NPetSh ...

  2. ViSP学习笔记(三):新建Visp工程并使用CMake完成编译

    开发环境:Unbuntu 18.04 LTS + ROS Melodic + ViSP 3.3.1 文章内容主要参考ViSP官方教学文档:https://visp-doc.inria.fr/doxyg ...

  3. ViSP学习笔记(二十五):基于图像的视觉伺服

    开发环境:Ubuntu 18.04 LTS + ROS Melodic + ViSP 3.3.1 文章内容主要参考ViSP官方教学文档:https://visp-doc.inria.fr/doxyge ...

  4. ROS学习笔记二:探索ROS文件系统

    ROS学习笔记二:探索ROS文件系统 ROS针对自己文件的特性,具有一些自己的工具命令,当针对ROS文件进行操作的时候是非常方便的.这些命令和ubuntu系统原有的命令相似但却不同,单独针对ROS文件 ...

  5. pythonsze_python学习笔记二 数据类型(基础篇)

    Python基础 对于Python,一切事物都是对象,对象基于类创建 不同类型的类可以创造出字符串,数字,列表这样的对象,比如"koka".24.['北京', '上海', '深圳' ...

  6. 嵌入式系统设计师学习笔记二十八:嵌入式程序设计③——高级程序设计语言

    嵌入式系统设计师学习笔记二十八:嵌入式程序设计③--高级程序设计语言 解释程序和编译程序 编译器的工作阶段示意图 语法错误:非法字符,关键字或标识符拼写错误 语法错误:语法结构出错,if--endif ...

  7. linux学习笔记(五)编译内核模块生成ko驱动文件

    系列文章目录 linux学习笔记(五)编译内核模块生成ko驱动文件 文章目录 系列文章目录 前言 一.加载内核简介 二.第一个hello world文件 1.文件树 2.hello.c 3.Makef ...

  8. NumPy学习笔记 二

    NumPy学习笔记 二 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...

  9. qml学习笔记(二):可视化元素基类Item详解(上半场anchors等等)

    原博主博客地址:http://blog.csdn.net/qq21497936 本文章博客地址:http://blog.csdn.net/qq21497936/article/details/7851 ...

  10. [转载]dorado学习笔记(二)

    原文地址:dorado学习笔记(二)作者:傻掛 ·isFirst, isLast在什么情况下使用?在遍历dataset的时候会用到 ·dorado执行的顺序,首先由jsp发送请求,调用相关的ViewM ...

最新文章

  1. 路由 php mysql_Php 连接 MySQL 的三种方式
  2. 可逆加密算法 php,php可逆加密的方法及原理
  3. 分析chrome中的network面板
  4. Django配置开发环境和生产环境以及配置Jinja2模板引擎
  5. Excel模板导出之导出教材订购表
  6. SPOJ LCS 后缀自动机
  7. windows下编译c语言文件路径,解决JNI在Windows环境下因长路径导致编译失败问题
  8. 《Total Commander:万能文件管理器》——第9.6节.后记
  9. 智能优化算法:探路者优化算法-附代码
  10. Pygame教程系列四:播放音频篇
  11. 美洽客服报表功能:用数据驱动企业业绩增长
  12. MATLAB求函数零点与极值
  13. BASE32编码--记录
  14. Flutter Sliver滚动组件
  15. 时值年末,年度CSDN小峯的回顾过去的2020年(推荐)
  16. 根据图片原型写一个html页面,如何分分钟开发高保真交互原型_html/css_WEB-ITnose
  17. Es6箭头函数详细用法
  18. linux如何查看x windows,X windows
  19. javascript_outline
  20. 地震--《孩子,快抓紧妈妈的手》

热门文章

  1. 十大职场潜规则送职场新人
  2. android l2tp 失败,修理 Android ICS 上那个抽风止不住的 L2TP/IPSec 客户端
  3. 利用Python调用outlook自动发送邮件
  4. torch.range()和torch.arange()
  5. python table_python中table是什么-女性时尚流行美容健康娱乐mv-ida网
  6. [Common]如何获取手机SN - MTK物联网在线解答 - 技术论坛
  7. 秀姿势(sugata)
  8. 索引的类型分类、区别、优缺点
  9. python贝叶斯分类器_朴素贝叶斯分类器的简单Python实现
  10. 血杀英雄为什么不显示服务器,血杀英雄元素系统玩法介绍