• OpenCV实现任意大小图片的合并(转)


    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合成效果如图 
    这里写图片描述

    转自:https://blog.csdn.net/ktigerhero3/article/details/53105372

  • 相关阅读:
    使用VB获得系统目录路径
    自动点击页面中的JavaScript链接
    vb 随机数
    进程监控程序 监视进程的创建
    UTF8 Encoding rules
    How to create and apply patch by GIT
    Java Access Bridge Why IsJavaWindow always returns false?
    TomatoUSB 挂载了/jffs/opt之后登录出现$提示符以及VI内存耗尽等各种异常
    MMU解释 MMU启用后,CPU的内存访问请求会被MMU截获
    如何调整Linux内核启动中的驱动初始化顺序
  • 原文地址:https://www.cnblogs.com/zl1991/p/9443451.html
Copyright © 2020-2023  润新知