首页 > 代码库 > Opencv实现多幅图片拼接在一起
Opencv实现多幅图片拼接在一起
未经本人允许,不得转载
先直接上代码,文末会有具体分析,代码也有相应注释。
本文是以三张图片横向排列拼接为例 ,其他的也是类似
IplImage* paletteImageRam1, paletteImageRam2, paletteImageRam3; //此处是定义了三个图片,实际使用时应当载入自己的三幅图片
//将三个图片拼接在一起
double width,height;
width = double(paletteImageRam1->width) *3.0; //第一幅图片的宽度乘以3就是拼接完的图像宽度,此处假设三张图的宽高都一样,实际使用可以将各自图像的宽度相加
height = double(paletteImageRam1->height); //第一幅图像的高度
IplImage* des = cvCreateImage(cvSize(width,height), paletteImageRam1->depth, paletteImageRam1->nChannels); //生成一个三幅拼接用的容器图片
cvSetImageROI(des, cvRect(0, 0,paletteImageRam1->width, height)); //设置容器图片中感兴趣的部分,前两个左边0,0代表感兴趣的区域的起点,后两个代表感兴趣区域的宽高
cvCopy(paletteImageRam1, des); //将第一幅图像放到感兴趣的区域里面,也就是第一个方格
cvResetImageROI(des);
cvSetImageROI(des, cvRect(paletteImageRam1->width, 0,paletteImageRam1->width,height));
cvCopy(paletteImageRam2, des);
cvResetImageROI(des);
cvSetImageROI(des, cvRect(paletteImageRam1->width*2, 0,paletteImageRam1->width,height));
cvCopy(paletteImageRam3, des);
cvResetImageROI(des);
//des就是最后拼接得到的图像
/************************/
// opencv里面cvSetImageROI(感兴趣的区域的起点x,感兴趣的区域的起点y,感兴趣的区域宽度w,感兴趣的区域高度h)函数,是用来设置一个操作区域的,就是说设定了这个区域然后再将图复制到这个里面来,然后再分割第二个区域,填进去
/***********************/
Opencv实现多幅图片拼接在一起