在一个窗口中显示多张图片
2016-04-05 20:10
369 查看
忘记了是引用那位大神的了
// showManyImage.cpp : Defines the entry point for the console application. // #include<opencv2\opencv.hpp> #include <stdio.h> #include <stdarg.h> #include <time.h> #include <iostream> using namespace std; using namespace cv; void cvShowManyImages(char* title, int nArgs, ...) { // img - Used for getting the arguments IplImage *img; // DispImage - the image in which input images are to be copied IplImage *DispImage; int size; int i; int m, n; int x, y; // w - Maximum number of images in a row 行 // h - Maximum number of images in a column 列 int w, h; // scale - How much we have to resize the image float scale; int max; // If the number of arguments is lesser than 0 or greater than 12 // return without displaying if (nArgs <= 0) { printf("Number of arguments too small....\n"); return; } else if (nArgs > 12) { printf("Number of arguments too large....\n"); return; } // Determine the size of the image, and the number of rows/cols from number of arguments else if (nArgs == 1) { w = h = 1; size = 300; } else if (nArgs == 2) { w = 2; h = 1; size = 300; } else if (nArgs == 3 || nArgs == 4) { w = 2; h = 2; size = 300; } else if (nArgs == 5 || nArgs == 6) { w = 3; h = 2; size = 200; } else if (nArgs == 7 || nArgs == 8) { w = 4; h = 2; size = 200; } else { w = 4; h = 3; size = 150; } // Create a new 3 channel image0 DispImage = cvCreateImage(cvSize(100 + size*w, 60 + size*h), 8, 3); // Used to get the arguments passed va_list args; va_start(args, nArgs); // Loop for nArgs number of arguments for (i = 0, m = 20, n = 20; i < nArgs; i++, m += (20 + size)) { // Get the Pointer to the IplImage img = va_arg(args, IplImage*); // Check whether it is NULL or not // If it is NULL, release the image, and return if (img == 0) { printf("Invalid arguments"); cvReleaseImage(&DispImage); return; } // Find the width and height of the image x = img->width; y = img->height; // Find whether height or width is greater in order to resize the image max = (x > y) ? x : y; // Find the scaling factor to resize the image scale = (float)((float)max / size); // Used to Align the images if (i % w == 0 && m != 20) { m = 20; n += 0 + size; } // Set the image ROI to display the current image //cvSetImageROI(DispImage, cvRect(m, n, (int)( x/scale ), (int)( y/scale ))); cvSetImageROI(DispImage, cvRect(m, n, (int)(x / scale), (int)(y / scale))); // cout<<"x="<<m<<"y="<<n<<endl; // Resize the input image and copy the it to the Single Big Image cvResize(img, DispImage); // Reset the ROI in order to display the next image cvResetImageROI(DispImage); } // Create a new window, and show the Single Big Image //cvNamedWindow( title, 1 ); cvShowImage(title, DispImage); /*cvWaitKey(0);*/ //cvDestroyWindow(title); // End the number of arguments va_end(args); // Release the Image Memory cvReleaseImage(&DispImage); }
相关文章推荐
- Redis未授权访问事故记录
- 关于fragment跳转activity的回传值问题
- 第六周上机实践项目4:静态成员应用
- HDU4859 海岸线(最小割)
- codeforces_620D. Professor GukiZ and Two Arrays
- 程序运行时的内存空间分布
- Web Server 与 App Server 的区别
- 134. Gas Station
- iOS应用启动页的渐变效果
- 【Android】8、活动的基本用法(一)
- weka
- 2014 小朋友排队(树状数组+逆序数)
- mysql
- ZMY_工厂模式
- python get方法
- 1001. A+B Format
- ccf 送货
- Ubuntu查看MySQL的数据库data存放路径
- 解析XML
- java编程的注意事项