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

opencv 将两张图片显示到一幅图片中

2015-10-27 21:07 239 查看
利用opencv处理图片后,希望将处理后的图片和处理前的图片显示在一起,以方便看出两者之间的差别。

刚开始的想法是利用SetImageRoi和CvCopy函数,可是CvCopy函数必须要求源图片和目的图片的尺寸一致,即使设置了Roi,由于图片的尺寸不一致,运行的时候还是会导致尺寸不匹配的错误。

然后想到的是SetImageRoi和CvCloneImage函数,但是CvCloneImage函数运行后,会将目的图片的尺寸修改成和源图片的尺寸一致,即使设置了Roi也没有效果。

后来看到了CvRepeat这个函数,可以完成想要的功能。

#include <cv.h>

#include <cxcore.h>

#include <cassert>

using namespace std;

void ImageMerge(IplImage* pImageA,IplImage* pImageB,IplImage*& pImageRes)

{

assert(pImageA != NULL && pImageB != NULL);

assert(pImageA->depth == pImageB->depth && pImageA->nChannels == pImageB->nChannels);

if (pImageRes != NULL)

{

cvReleaseImage(&pImageRes);

pImageRes = NULL;

}

CvSize size;

size.width = pImageA->width + pImageB->width + 10;

size.height = (pImageA->height > pImageB->height) ? pImageA->height : pImageB->height;

pImageRes = cvCreateImage(size,pImageA->depth,pImageA->nChannels);

CvRect rect = cvRect(0,0,pImageA->width,pImageA->height);

cvSetImageROI(pImageRes,rect);

cvRepeat(pImageA,pImageRes);

cvResetImageROI(pImageRes);

rect = cvRect(pImageA->width + 10,0,pImageB->width,pImageB->height);

cvSetImageROI(pImageRes,rect);

cvRepeat(pImageB,pImageRes);

cvResetImageROI(pImageRes);

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