创建一个基于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);

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

posted on 2015-04-22 22:37  Curnane  阅读(706)  评论(0编辑  收藏  举报

导航