代码改变世界

Opencv中一个窗口显示两幅图

2013-04-05 19:52  freecloudinsky  阅读(6763)  评论(0编辑  收藏  举报

  最近在学习OpenCV,觉得OpenCV很好用,一般情况下,只用一个窗口显示一幅图像,假如想要一个窗口显示两幅图像或者多幅图像呢,怎么办?最近做了一个实验.

//思想:最简单的方法就是将两幅图合并为一幅图  然后再显示
//具体操作:可以先开辟一个大的图像空间(大小是所有小图的和),然后根据你要显示的图像大小和位置分别设置ROI,把小图copy进去。
//最后释放ROI把大图显示出来

程序代码:

#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
int main(int argc, char* argv[])
{
 IplImage  *img1,*img2,*dst1,*dst2,*dst_big;      //img1 img2 原图  dst1、dst2放缩后的图  dst_big 大图
 CvRect rect1=cvRect(0,0,300,300);                     //两个ROI区域
 CvRect rect2=cvRect(300,0,300,300);
 img1=cvLoadImage("ff.jpg");
 img2=cvLoadImage("Lena.jpg");
 dst1=cvCreateImage(cvSize(300,300),img1->depth,3);
 dst2=cvCreateImage(cvSize(300,300),img2->depth,3);
 dst_big=cvCreateImage(cvSize(600,300),img2->depth,3);
 cvResize(img1,dst1);                      //放缩
 cvResize(img2,dst2);
 cvSetImageROI(dst_big,rect1);                //设置ROI
 cvCopy(dst1,dst_big);
 cvSetImageROI(dst_big,rect2);
 cvCopy(dst2,dst_big);
 cvResetImageROI(dst_big);                   //释放ROI
 cvNamedWindow("Display");
 cvShowImage("Display",dst_big);                //显示合并后的大图
 cvWaitKey();
 cvReleaseImage(&img1);                      //释放图像空间
 cvReleaseImage(&img2);
 cvReleaseImage(&dst1);
 cvReleaseImage(&dst2);
 cvReleaseImage(&dst_big);
 return 0;
}

结果如图: