OpenCV 合併影象

Ammar Ali 2023年1月30日
  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