C++ opencv图片拼接

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/zhou4411781/article/details/100124900

对多个图片进行横向直接拼接,利用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);  
	
}    

拼接测试结果为:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/zhou4411781/article/details/100124900
今日推荐