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);
}
刚开始的想法是利用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);
}
相关文章推荐
- 网站架构的演变之路(58同城)
- Jmeter之Bean shell使用(一)
- 制作loop档案
- [Linux学习笔记] Linux常用命令 - 权限管理命令
- 老王学linux-lamp-rpm
- 老王学linux-cacti
- linux c/c++ 后台开发常用组件之: 高性能LRU本地缓存
- CheungSSH运维自动化软件 批量管理上千台服务器
- Flask 框架构建
- 20151027 linux文件操作命令 体系结构
- proxychains and ssh(代理服务器linux)
- Hadoop学习笔记之<搭建环境>
- 网站开发进阶(五)网站发布之道
- 网站开发进阶(五)网站发布之道
- linux文章(11)---umask和chmod
- 【Docker入门】使用Nginx反向代理最前端,多个Docker容器做后端。将多台服务器整合到一台服务器上
- 初学shell,今天遇到由wget下载到本地的网页源代码的乱码问题,无聊的写了一个转码的脚本
- linux下/etc/hosts 和hostname文件的区别,如何正确地修改hostname
- 记录给nginx增加模块过程中碰到的问题
- Windows7+Eclipse+jdk7+CentOS5.8+Hadoop2.7.1开发环境搭建