您的位置:首页 > 运维架构

Opencv将两幅或多幅IplImage图像同时并行显示在同一副图像上——程序

2014-10-14 17:10 453 查看
做图像对比时难免想要将两幅图像平行显示在同一幅图像中或者竖直显示在同一副图像中。opencv提供了cvSetImageROI()函数可以很简单的实现这一功能,我只需先读取两幅图像,确定图像要缩放的倍数后,再确定图像是按列并排还是按行并排,计算图像要缩放到的尺寸,以及设计两幅图像之间,图像和边缘之间要放多少空隙或者不放,就ok了。
下面就实现来看看。我的两幅图像大小是一样的,这里两幅都是IplImage图像,读入时先转成灰度图再共同显示,显示时上下左右离边界,两幅图像之间均有10个像素的距离,显示后在图像上画横线对比:
原图左:
原图右:
程序如下:
#include "stdafx.h"#include <iostream>#include <stdio.h>#include <math.h>#include <opencv/cv.h>#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>using namespace cv;using namespace std;void main(){IplImage *image1=cvLoadImage("1-CMOS0.bmp");IplImage *image2=cvLoadImage("1-CMOS1.bmp");int H=image1->height;int W=image1->width;//以下为彩色转灰度图IplImage* Img1  = cvCreateImage( cvSize(W,H), IPL_DEPTH_8U, 1);IplImage* Img2  = cvCreateImage( cvSize(W,H), IPL_DEPTH_8U, 1);cvCvtColor( image1, Img1, CV_RGB2GRAY);cvCvtColor( image2, Img2, CV_RGB2GRAY);//以下为设计新的图像IplImage* ShowImage;  //这个就是要共同显示两幅图像的图像float scale=1.2;//图像缩放倍数int sizew=W/scale;int sizeh=H/scale;int r=2;//一行放r幅图像int c=1;//一列放c幅图像int spaceW=30;//图像之间,图像和边缘之间所有的间隙之和int spaceH=20;int x= spaceW/(r+1); //左图像左上角起始点坐标int y= spaceH/(c+1);ShowImage = cvCreateImage( cvSize(30 + sizew*r, 20 + sizeh*c), IPL_DEPTH_8U, 1 );  //赋给这个图像大小并设为单通道1。如之前无转为灰度图步骤则设置为3.//左图放在左边cvSetImageROI(ShowImage, cvRect(x, y, (int)( W/scale ), (int)( H/scale )));cvResize(Img1, ShowImage);cvResetImageROI(ShowImage);//右图放在右边int x1=x+(int)( W/scale )+spaceW/(r+1);//右图像的左上角起始位置int y1=y;cvSetImageROI(ShowImage, cvRect(x1, y1, (int)( W/scale ), (int)( H/scale )));cvResize(Img2, ShowImage);cvResetImageROI(ShowImage);//画横线用来对比for( int j = 10; j < H; j += 24 ){cvLine( ShowImage, cvPoint(0,j), cvPoint(30 + sizew*r,j), cvScalar(255,255,255),1); //1是粗细}cvShowImage("共同显示", ShowImage);cvWaitKey();cvReleaseImage( &ShowImage );}
程序运行后显示结果如下:[/code]
上面是简单的两幅图像并行显示的情况,多幅图像同时显示时,只需合理设计要显示图像的大小以及各图像的排列方式即可。

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: