C++OpenCV拼接图象

338 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情

对于某些需要进行图像拼接的场所,使用OpenCV中的hconcat与vconcat函数就非常方便,这两个函数功能相同,都是进行图像拼接,只不过是拼接的方向不同,此处以cv::hconcat函数为例进行说明。

void cv::hconcat(InputArray img0, InputArray img1, OutputArray img)

hconcat函数,要求两个拼接的图像必须具有相同的高度,其结果是将两幅图像进行横向的拼接。其中第一个参数为待拼接的输入图像,第二个参数也是待拼接的输入图像,第三个参数为拼接完成后的输出图像。

由于图像本身就是一组矩阵,彩色图像为三通道的二维矩阵,灰度图为单通道二维矩阵,因此对于图像的拼接,实际上就是对矩阵的拼接。

#include <opencv2\opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;

int main()
{
	//读取四幅需要拼接的图像
	Mat img00 = imread("l0.jpg");
	Mat img01 = imread("l1.jpg");
	Mat img10 = imread("r0.jpg");
	Mat img11 = imread("r1.jpg");
	// 只要四个图像均不为空
	if (img00.empty() || img01.empty() || img10.empty() || img11.empty())
	{
		cout << "image path error!" << endl;
		return -1;
	}
	Mat img, img0, img1;
	//图像横向拼接方式
	hconcat(img00, img01, img0);
	hconcat(img10, img11, img1);
	//横向连接结果再进行竖向连接
	vconcat(img0, img1, img);
	//显示拼接图像的结果
        //左右拼接方式
	imshow("img0", img0);
        //左右拼接方式
	imshow("img1", img1);
        //上下拼接方式
	imshow("img", img);
	waitKey(0);
	return 0;
}

以四幅图像为例,通过上述代码的拼接效果如如下,在拼接过程要注意对应位置拼接时需要保证图像的宽高一致性,否则会导致拼接出错的问题。由于实验图像均为600x800,相对较大,因为未能显示完全。

两幅图像左右拼接的结果

image.png

两幅图像左右拼接的结果 image.png

对上述两幅拼接完成的图像进行上下拼接的结果。 image.png