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

OpenCV实现任意大小图片的合并

2016-11-09 20:21 337 查看
OpenCV实现图像合并主要有两种方法

方法一:使用Mat.push_back方法将列数相同的图像加到最后一行

方法二: 主要思路是将图像拷贝到待合并图像的感兴趣区域

(1)新建一个要合并的图像(容器)

(2)在新建合并图像中设置感兴趣区域

(3)将待拷贝图像拷贝到感性趣区域中

法1.使用Mat.push_back方法将列数相同的图像加到最后一行

注意此方法只能将图像合并到底部

示例代码:

#include<cv.h>
#include<highgui.h>
using namespace cv;

int main()
{
Mat image1=imread("1.jpg");
Mat image2=imread("2.jpg");
if (image1.empty() || image2.empty())
{
printf("open error");
return 0;
}
//push_back 方法将图像2拷贝到图像1的最后一行
Mat img_merge;
img_merge.push_back(image1);
img_merge.push_back(image2);

namedWindow("img_merge", 0);
imshow("img_merge", img_merge);

waitKey();
return 0;
}


法2.将图像拷贝到待合并图像的感兴趣区域

此方法可以将图像拷贝到任意区域,位置由感兴趣区域决定

示例代码:

#include<cv.h>
#include<highgui.h>
using namespace cv;

int main()
{
Mat image1=imread("1.jpg");
Mat image2=imread("2.jpg");
if (image1.empty() || image2.empty())
{
printf("open error");
return 0;
}
//1.新建一个要合并的图像
Mat img_merge;
Size size(image1.cols + image2.cols, MAX(image1.rows, image1.rows));
img_merge.create(size, CV_MAKETYPE(image1.depth(), 3));
img_merge = Scalar::all(0);
Mat outImg_left, outImg_right;
//2.在新建合并图像中设置感兴趣区域
outImg_left = img_merge(Rect(0, 0, image1.cols, image1.rows));
outImg_right = img_merge(Rect(image1.cols, 0, image1.cols, image1.rows));
//3.将待拷贝图像拷贝到感性趣区域中
image1.copyTo(outImg_left);
image2.copyTo(outImg_right);
namedWindow("image1", 0);
imshow("image1", img_merge);
waitKey();
return 0;
}


最后上两张合并后的图片

方法1合成效果如图



方法2合成效果如图

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