zoukankan      html  css  js  c++  java
  • 创建一个基于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]>
    ", 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);

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

  • 相关阅读:
    数组中重复的数字
    第一个只出现一次的字符位置
    丑数
    字符串的排列
    把数组排成最小的数
    圆圈中最后剩下的数
    同步通信与异步通信
    S3C2440 UART串口驱动
    ARM处理器工作模式
    s3c2440系统时钟
  • 原文地址:https://www.cnblogs.com/freshmen/p/4444417.html
Copyright © 2011-2022 走看看