aihot  2017-05-30 20:07:13  OpenCV |   查看评论   
利用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);
  • }
 

除特别注明外,本站所有文章均为 赢咖4注册 原创,转载请注明出处来自opencv将两张图片显示到一幅图片中

留言与评论(共有 0 条评论)
   
验证码:
[lianlun]1[/lianlun]