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

  本文介绍了如何使用ViSP创建一幅图像,并在窗口中显示出来。如果你已经按照ViSP学习笔记(二):使用CMake编译ViSP工程中的步骤,下载了image文件夹并完成了CMake步骤,那么下面只需要进行简单的编译和执行工作,就能完成图像的创建和显示。

1.创建并显示一幅图像

 第一步我们执行的是image中的 tutorial-image-display.cpp例程,文件内容如下

#include <visp3/gui/vpDisplayGDI.h>
#include <visp3/gui/vpDisplayX.h>
int main()
{
  vpImage<unsigned char> I(2160, 3840, 128); //创建一幅3840*2160的图像,像素的灰度值设置为128
  try {
// 依次尝试不同的图像显示工具
#if defined(VISP_HAVE_X11)
    vpDisplayX d(I);
#elif defined(VISP_HAVE_GDI)
    vpDisplayGDI d(I);
#endif
    vpDisplay::setTitle(I, "My image");// 设置图像名称
    vpDisplay::display(I); //显示图像
    vpDisplay::displayCircle(I, I.getHeight() / 2, I.getWidth() / 2, 200, vpColor::red, true); //在图像中心绘制一个半径为200的红色的圆
    vpDisplay::flush(I); //在窗口中显示图像
    std::cout << "A click to quit..." << std::endl;
    vpDisplay::getClick(I);
  } catch (const vpException &e) {
    std::cout << "Catch an exception: " << e.getMessage() << std::endl;
  }

 进入build文件夹,并编译程序

cd ~/visp_ws/image/build
make tutorial-image-display

  执行程序

./tutorial-image-display

显示结果如下

在这里插入图片描述

 由于图像的分辨率太高超过了屏幕的显示范围,因此只有一部分图像显示出来,下面我们来介绍如何手动和自动的调整图像显示比例。

2.手动调整显示比例

  需要按照下面的方式对代码进行修改

#if defined(VISP_HAVE_X11)
    vpDisplayX d(I, vpDisplay::SCALE_5); // 增加一个尺度调整参数vpDisplay::SCALE_5,表示缩小5倍显示
#elif defined(VISP_HAVE_GDI)
    vpDisplayGDI d(I, vpDisplay::SCALE_5);
#endif

 或者按照下面方式修改

#if defined(VISP_HAVE_X11)
  vpDisplayX d;
#elif defined(VISP_HAVE_GDI)
  vpDisplayGDI d;
#endif
  d.setDownScalingFactor(vpDisplay::SCALE_5);// 调用尺度调整函数setDownScalingFactor
  d.init(I); // 初始化
}

其余部分不做修改,显示效果如下

在这里插入图片描述  上述内容已经通过

tutorial-image-display-scaled-manu.cpp 例程文件实现了,可以通过执行以下命令来查看效果

cd ~/visp_ws/image/build
make tutorial-image-display-scaled-manu
./tutorial-image-display-scaled-manu

3.自动调整显示比例

 通过程序自动调整显示的比例,以适应屏幕显示的需求。对代码作以下修改

#if defined(VISP_HAVE_X11)
    vpDisplayX d(I, vpDisplay::SCALE_AUTO); //自动设置尺度调整参数
#elif defined(VISP_HAVE_GDI)
    vpDisplayGDI d(I, vpDisplay::SCALE_AUTO);
#endif

或者

#if defined(VISP_HAVE_X11)
  vpDisplayX d;
#elif defined(VISP_HAVE_GDI)
  vpDisplayGDI d;
#endif
  d.setDownScalingFactor(vpDisplay::SCALE_AUTO); // 调用尺度调整函数
  d.init(I);
}

 其余部分不做修改,显示效果如下

在这里插入图片描述上述内容已经通过

tutorial-image-display-scaled-auto.cpp 例程文件实现了,可以通过执行以下命令来查看效果

cd ~/visp_ws/image/build
make tutorial-image-display-scaled-auto
./tutorial-image-display-scaled-auto

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

在这里插入图片描述