版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
对多个图片进行横向直接拼接,利用opencv函数实现,为了方便,测试使用的是同一个图片拼接。我直接利用linux g++编译的,生产可执行文件,执行即可得到结果,编译命令参见:https://blog.csdn.net/zhou4411781/article/details/100020852
单个图片为:
#include<opencv2/opencv.hpp>
#include<cv.h>
#include<vector>
using namespace cv;
using namespace std;
void get_imgs_stitching(vector<Mat>imgs_vec)
{
int resize_width = 200;
int resize_height = 300;
// 定义输出图像,暂定义为三张图像拼接
Mat outputImage = Mat::zeros(resize_height, resize_width*3, imgs_vec[0].type());
for(int i = 0; i < imgs_vec.size(); i ++)
{
Mat srcImage = imgs_vec[i];
Mat dstImage;
// 进行一定比例缩放
resize(srcImage, dstImage, Size(resize_width, resize_height), (0, 0), (0, 0), cv::INTER_LINEAR);
// 横向拼接图片,因此cvRet第二个参数均设为0
CvRect rect = cvRect(resize_width*i, 0, dstImage.cols, dstImage.rows);
Mat dstMat = outputImage(rect);
// 将指定拷贝至目标图像
dstImage.colRange(0, dstImage.cols).copyTo(dstMat);
}
// 保存图像
imwrite("img_stitching.png", outputImage);
// 显示图像
imshow("img_stitching", outputImage);
waitKey();
}
int main()
{
Mat img = imread("coffe.jpg", ImreadModes::IMREAD_UNCHANGED);
// 定义图像集合,可以是不同图片,这里为了简单测试,使用同一张照片
vector< Mat > imgs_vec;
for( int i = 0; i < 3; i++)
{
imgs_vec.push_back(img);
}
get_imgs_stitching(imgs_vec);
}
拼接测试结果为: