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

在上一篇文章ViSP学习笔记(二):使用CMake编译ViSP工程中我们介绍了如何使用CMake编译一个现成的Visp例程,而在这篇文章中我们就介绍如何从无到有新建一个Visp工程并完成编译过程。

  1. 创建工程

  • 新建文件夹

cd $VISP_WS
mkdir started

  • 进入文件夹,新建工程文件

cd started
touch tutorial-viewer.cpp

  • 打开工程文件

gedit tutorial-viewer.cpp

  • 将代码复制进去并保存关闭,本文仍然使用tutorial-viewer这个例程的代码为例,代码内容不再介绍,可以参看上篇博客

#include <visp3/gui/vpDisplayD3D.h>
#include <visp3/gui/vpDisplayGDI.h>
#include <visp3/gui/vpDisplayGTK.h>
#include <visp3/gui/vpDisplayOpenCV.h>
#include <visp3/gui/vpDisplayX.h>
#include <visp3/io/vpImageIo.h>
int main(int argc, char **argv)
{
  if (argc != 2) {
    printf("Usage: %s <image name.[pgm,ppm,jpeg,png,tiff,bmp,ras,jp2]>\n", argv[0]);
    return -1;
  }
  vpImage<vpRGBa> I;
  try {
    vpImageIo::read(I, argv[1]);
  } catch (...) {
    std::cout << "Cannot read image \"" << argv[1] << "\"" << std::endl;
    return -1;
  }
  try {
#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);
#else
    std::cout << "No image viewer is available..." << std::endl;
#endif
    vpDisplay::setTitle(I, "My image");
    vpDisplay::display(I);
    vpDisplay::flush(I);
    std::cout << "A click to quit..." << std::endl;
    vpDisplay::getClick(I);
  } catch (const vpException &e) {
    std::cout << "Catch an exception: " << e << std::endl;
  }
}

2. 获取CMakeLists.txt文件

在对C++代码进行编译时,需要对应的脚本文件Makefile。但直接编写Makefile过于复杂,所以利用CMake工具自动生成对应的Makefile文件,CMake语法也非常简单,且只需要编写一个CMakeLists.txt文件即可(注意大小写和字母不要写错)

新建CMakeLists.txt文件

touch CMakeLists.txt

  • 打开CMakeLists.txt文件

gedit CMakeLists.txt

  • 将下列代码复制进去并保存关闭

project(tutorial-image) // 定义工程的名字
cmake_minimum_required(VERSION 2.8) //确定Cmake的最低版本
find_package(VISP REQUIRED) //查找指定的包文件 VISPConfig.cmake其中定义了两个变量VISP_INCLUDE_DIRS和VISP_LIBRARIES
include_directories(${VISP_INCLUDE_DIRS}) //设置包含的目录
add_executable(tutorial-viewer tutorial-viewer.cpp) //生成可执行文件
target_link_libraries(tutorial-viewer ${VISP_LIBRARIES}) // 设置 target 需要链接的库

上面的中文注释只是为了帮助大家理解文件内容,在复制时需要将中文注释部分以及//符号都删除掉,否则会导致编译报错

3. 获取monkey.ppm文件

  因为我们这个例程是要打开并显示一幅图片,因此我们需要提前准备好图片文件,我们可以通过以下指令从github上获取该图片

svn export https://github.com/lagadic/visp.git/trunk/tutorial/image/monkey.ppm

也可以直接从我们之前下载过的~/visp_ws/image文件夹中直接把monkey.ppm文件拷贝到 ~/visp_ws/started文件夹中。此时我们的 ~/visp_ws/started文件夹下应该包含以下三个文件tutorial-viewer.cpp,CMakeLists.txt和monkey.ppm ,如下图所示
在这里插入图片描述

4. 开始编译

  • 新建build文件夹,用于储存编译后的各类文件

mkdir build

  • 进入build文件夹,配置工程

cd build
ccmake .. -DCMAKE_BUILD_TYPE=Release

如果执行第二个指令报错的话,可能需要安装一个gui工具,指令如下
sudo apt install cmake-curses-gui

进入配置界面

在这里插入图片描述

点击键盘上的“c”键,进入以下界面

在这里插入图片描述

再次点击“c”键,进入以下界面

在这里插入图片描述

  • 点击“g”键生成Makefile文件并退出
  • 编译并生成可执行文件

make

5.运行程序显示效果

./tutorial-viewer ../monkey.ppm

结果如下

在这里插入图片描述

如果大家对于深度学习与计算机视觉领域感兴趣,希望获得更多的知识分享与最新的论文解读,欢迎关注我的个人公众号“深视”。

在这里插入图片描述