OpenCV 合并图像

Ammar Ali 2024年2月15日
  1. 在 Python 中使用 NumPy 的 concatenate() 函数组合图像
  2. 在 Python 中组合不同大小的图像
  3. 在 Python 中垂直组合图像
OpenCV 合并图像

本教程将讨论在 Python 中使用 Python 的 NumPy 的 concatenate() 函数组合两个图像。

在 Python 中使用 NumPy 的 concatenate() 函数组合图像

我们可以使用 OpenCV 的 imread() 函数读取图像并将它们存储在矩阵中。我们可以使用 NumPy 的 concatenate() 函数来连接沿不同轴的图像矩阵。

例如,让我们使用 NumPy 的 zeros() 函数创建两个不同颜色的图像,然后使用 concatenate() 函数将它们水平组合。请参阅下面的代码。

import cv2
import numpy as np

img_1 = np.zeros((312, 312, 3), dtype=np.uint8)
img_1[:, :] = (255, 0, 0)

img_2 = np.zeros((312, 312, 3), dtype=np.uint8)
img_2[:, :] = (0, 255, 0)

img_3 = np.concatenate((img_1, img_2), axis=1)

cv2.imshow("Img_1", img_1)
cv2.imshow("Img_2", img_2)
cv2.imshow("Img_3", img_3)
cv2.waitKey(0)

输出:

合并相同大小的图像

请注意,concatenate() 函数仅在两个图像具有相同大小时才有效。concatenate() 函数的第一个参数包含我们想要组合的图像。

我们只使用了两个图像,但我们可以使用尽可能多的图像,concatenate() 函数会将它们组合起来。axis 参数指定图像组合的方向。

我们水平组合了上面的图像,但我们也可以使用 axis=0 参数垂直组合它们。上面的代码只会合并大小相同的图片,如果我们尝试合并不同大小的图片会报错。

在 Python 中组合不同大小的图像

我们还可以组合两个不同大小的图像。

例如,要水平组合两个不同大小的图像,我们必须创建一个空白图像,其高度将等于两个给定图像的最大高度,宽度等于给定图像的组合宽度。

我们可以使用 shape 属性来获取给定图像的高度和宽度,我们将使用它们来创建空白图像。创建空白图像后,我们可以给它一个我们自己选择的颜色。

之后,我们必须用给定图像的像素替换空白图像像素。例如,我们先添加第一张图片,然后再添加第二张图片。

如果其中一个图像与另一个图像相比较小,则空白图像的其余部分将具有我们定义的相同颜色。例如,让我们将水果图像与猫图像结合起来。

请参阅下面的代码。

import cv2
import numpy as np

img_1 = cv2.imread("fruit.jpg")

img_2 = cv2.imread("cat.jpg")

h1, w1 = img_1.shape[:2]
h2, w2 = img_2.shape[:2]

img_3 = np.zeros((max(h1, h2), w1 + w2, 3), dtype=np.uint8)
img_3[:, :] = (255, 255, 255)

img_3[:h1, :w1, :3] = img_1
img_3[:h2, w1 : w1 + w2, :3] = img_2

cv2.imshow("Img_1", img_1)
cv2.imshow("Img_2", img_2)
cv2.imshow("Img_3", img_3)
cv2.waitKey(0)

输出:

组合不同大小的图像

上面的代码会横向添加两张不同大小的图片,但我们也可以更改代码为纵向添加两张图片。我们必须先改变空白图像的形状。

在 Python 中垂直组合图像

在上面的代码中,我们将高度指定为两个图像的最大高度,宽度等于两个图像的组合宽度。

如果我们想垂直组合图像,我们必须创建一个空白图像,其高度等于两个图像的组合高度,宽度等于两个图像的最大宽度。之后,我们还必须更改第二张图像在空白图像上的位置。

在上面的代码中,我们添加了从第一张图像的宽度开始水平位置的第二张图像,但是在这种情况下,我们将从第一张图像的高度开始添加图像。例如,让我们将上面的两个图像垂直组合。

请参阅下面的代码。

import cv2
import numpy as np

img_1 = cv2.imread("fruit.jpg")

img_2 = cv2.imread("cat.jpg")

h1, w1 = img_1.shape[:2]
h2, w2 = img_2.shape[:2]

img_3 = np.zeros((h1 + h2, max(w1, w2), 3), dtype=np.uint8)
img_3[:, :] = (255, 255, 255)

img_3[:h1, :w1, :3] = img_1
img_3[h1 : h1 + h2, :w2, :3] = img_2

cv2.imshow("Img_1", img_1)
cv2.imshow("Img_2", img_2)
cv2.imshow("Img_3", img_3)
cv2.waitKey(0)

输出:

垂直组合图像

我们可以在上面的输出中看到两个图像是垂直组合的。

作者: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook

相关文章 - OpenCV Image