创建一个基于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);
添加鼠标中断。若发生鼠标操作,则中断程序。