首页 > 代码库 > 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实现多幅图片拼接在一起