OpenCV学习之旅——合并多张图像操作

本文详细介绍了如何使用OpenCV库将两张图像进行合并,包括相同尺寸图像的直接合并及不同尺寸图像的处理方法。通过具体代码示例,展示了如何调整图像尺寸、位置,以及添加边界线,以实现高质量的图像可视化效果。

在使用OpenCV进行可视化的过程中,经常有对多张图像进行合并的需求,需要小心处理不同图像的类型、尺寸等属性,下面直接给出开发常用的代码。

如果已经知道需要合并的两张图像的尺寸是完全一致的,直接用下面的代码即可:

#include <opencv2/opencv.hpp>
void MergeTwoImages() {
    cv::Mat img1(800, 600, CV_8UC3, cv::Scalar(0));
    cv::Mat img2(800, 600, CV_8UC3, cv::Scalar(128, 128, 128));

    cv::Mat merged_img(img1.rows, img1.cols + img2.cols + 1,
                                                 img1.type(), cv::Scalar(0));

    img1.copyTo(merged_img.colRange(0, img1.cols));
    img2.copyTo(merged_img.colRange(img2.cols + 1, merged_img.cols));

    // Draw the boundary line
    cv::line(merged_img, cv::Point(img1.cols, 0), cv::Point(img1.cols, merged_img.rows),
                    cv::Scalar(255, 255, 255));

    cv::imshow("merged_img", merged_img);
    cv::waitKey(0);
}

可视化结果如下图所示:
在这里插入图片描述

如果两张合并的图像尺寸不一致,则需要对上述代码做一些修改,得到如下的代码:

void MergeTwoImages2() {
    cv::Mat img1(800, 600, CV_8UC3, cv::Scalar(128, 255, 0));
    cv::Mat img2(700, 500, CV_8UC3, cv::Scalar(128, 128, 128));

    
    int merged_rows = std::max(img1.rows, img2.rows);
    int merged_cols = img1.cols + img2.cols;

    cv::Mat merged_img(merged_rows, merged_cols + 1, img1.type(), cv::Scalar(0));

    img1.copyTo(merged_img(cv::Rect(0, 0, img1.cols, img1.rows)));
    img2.copyTo(merged_img(cv::Rect(img1.cols + 1, 0, img2.cols, img2.rows)));

    // Draw the boundary line
    cv::line(merged_img, cv::Point(img1.cols, 0), cv::Point(img1.cols, merged_img.rows),
                    cv::Scalar(255, 255, 255));

    cv::imshow("merged_img2", merged_img);
    cv::waitKey(0);
}

可视化结果如下:
在这里插入图片描述

【参考】:
OpenCV中Mat类rowRange和colRange的用法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值