开发环境: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工程并完成编译过程。
- 创建工程
- 新建文件夹
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
结果如下
如果大家对于深度学习与计算机视觉领域感兴趣,希望获得更多的知识分享与最新的论文解读,欢迎关注我的个人公众号“深视”。
评论(0)
您还未登录,请登录后发表或查看评论