Opencv - 如何合并两个图像

时间:2015-10-20 14:41:01

标签: c++ image opencv

我是opencv的新手,如果有一个如何合并两个图像的例子,我在互联网上搜索,但没有找到任何有用的帮助我。有人可以通过一些指示或小代码来帮助我理解吗?提前谢谢

2 个答案:

答案 0 :(得分:10)

从评论到问题,你说:

  

我不想将第一张照片中的一半与第二张照片的另一半混合在一起。我只是想要打印两个图像,一个靠近另一个图像

所以,从这些图片开始:

enter image description here

enter image description here

你想要这个结果吗?

enter image description here

请注意,如果两张图片的高度相同,则无法看到黑色背景。

代码:

#include <opencv2\opencv.hpp>
using namespace cv;

int main()
{
    // Load images
    Mat3b img1 = imread("path_to_image_1");
    Mat3b img2 = imread("path_to_image_2");

    // Get dimension of final image
    int rows = max(img1.rows, img2.rows);
    int cols = img1.cols + img2.cols;

    // Create a black image
    Mat3b res(rows, cols, Vec3b(0,0,0));

    // Copy images in correct position
    img1.copyTo(res(Rect(0, 0, img1.cols, img1.rows)));
    img2.copyTo(res(Rect(img1.cols, 0, img2.cols, img2.rows)));

    // Show result
    imshow("Img 1", img1);
    imshow("Img 2", img2);
    imshow("Result", res);
    waitKey();

    return 0;
}

答案 1 :(得分:1)

我在C#(OpenCvSharp)中垂直连接两个图像:(图像可以是不同大小)

    private Mat VerticalConcat(Mat image1, Mat image2)
    {
        var smallImage = image1.Cols < image2.Cols ? image1 : image2;
        var bigImage = image1.Cols > image2.Cols ? image1 : image2;
        Mat combine = Mat.Zeros(new OpenCvSharp.CPlusPlus.Size(Math.Abs(image2.Cols - image1.Cols), smallImage.Height), image2.Type());
        Cv2.HConcat(smallImage, combine, combine);
        Cv2.VConcat(bigImage, combine, combine);
        return combine;
    }