持续创作,加速成长!这是我参与「掘金日新计划 · 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,相对较大,因为未能显示完全。
两幅图像左右拼接的结果
两幅图像左右拼接的结果
对上述两幅拼接完成的图像进行上下拼接的结果。