创建一个基于ViSP的图片显示程序

    创建一个图片读取,并在windows下窗口显示的程序。

 1 #include <visp/vpDisplayD3D.h>

 2 #include <visp/vpDisplayGDI.h>

 3 #include <visp/vpDisplayGTK.h>

 4 #include <visp/vpDisplayX.h>

 5 #include <visp/vpDisplayOpenCV.h>

 6 #include <visp/vpImageIo.h>

 7 int main(int argc, char** argv)

 8 {

 9   if(argc != 2) {

10     printf( "Usage: %s <image name.[pgm,ppm,jpeg,png,tiff,bmp,ras,jp2]>\n", argv[0] );

11     return -1;

12   }

13   vpImage<vpRGBa> I;

14   try {

15     vpImageIo::read(I, argv[1]);

16   }

17   catch(...) {

18     std::cout << "Cannot read image \"" << argv[1] << "\"" << std::endl;

19     return -1;

20   }

21   try {

22 #if defined(VISP_HAVE_X11)

23     vpDisplayX d(I);

24 #elif defined(VISP_HAVE_OPENCV)

25     vpDisplayOpenCV d(I);

26 #elif defined(VISP_HAVE_GTK)

27     vpDisplayGTK d(I);

28 #elif defined(VISP_HAVE_GDI)

29     vpDisplayGDI d(I);

30 #elif defined(VISP_HAVE_D3D9)

31     vpDisplayD3d d(I);

32 #else

33     std::cout << "No image viewer is available..." << std::endl;

34 #endif

35     vpDisplay::setTitle(I, "My image");

36     vpDisplay::display(I);

37     vpDisplay::flush(I);

38     std::cout << "A click to quit..." << std::endl;

39     vpDisplay::getClick(I);

40   }

41   catch(vpException e) {

42     std::cout << "Catch an exception: " << e << std::endl;

43   }

44 }

下面对代码进行逐行解释:

#include <visp/vpDisplayD3D.h>

#include <visp/vpDisplayGDI.h>

#include <visp/vpDisplayGTK.h>

#include <visp/vpDisplayX.h>

#include <visp/vpDisplayOpenCV.h>

以上头文件包括了所有的图片显示的头文件。前两个是windows系统下的,它们要求Direct 3D或者GDI(图像化设备界面)。第三个需要跨平台的GTK库。第四个是类Unix系统下的,且要求libX11可用。最后一个则需要安装跨平台的第三方库OpenCV。

#include <visp/vpImageIo.h>

包含这个头文件允许使用vpImageIo类来从硬盘读取各种格式的图片。

 vpImage<vpRGBa> I;

创建一个每个像素都用RGBa编码的彩色图像。

try {

    vpImageIo::read(I, argv[1]);

  }

  catch(...) {

    std::cout << "Cannot read image \"" << argv[1] << "\"" << std::endl;

    return -1;

  }

从硬盘读取文件,若失败,则输出对应提示。

#if defined(VISP_HAVE_X11)

    vpDisplayX d(I);

#elif defined(VISP_HAVE_OPENCV)

    vpDisplayOpenCV d(I);

#elif defined(VISP_HAVE_GTK)

    vpDisplayGTK d(I);

#elif defined(VISP_HAVE_GDI)

    vpDisplayGDI d(I);

#elif defined(VISP_HAVE_D3D9)

    vpDisplayD3d d(I);

#else

    std::cout << "No image viewer is available..." << std::endl;

#endif

展示图像,第一个可用的图片查看工具被使用。需要注意,一张图像只能有一次展示。

 vpDisplay::getClick(I);

添加鼠标中断。若发生鼠标操作,则中断程序。

你可能感兴趣的:(vi)