最近在学习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;
}
结果如图: