我有幾張圖像,我想要在每張圖像中添加一個新圖像8個圖像,每行5個並行使用Python中的openCV。如何從openCV中的現有圖像中最好地創建新圖像
奇怪的是,我沒有找到直接解決這個問題的答案。從我在openCV方面的多餘知識中,我現在會計算應該複製現有圖像的圖像的寬度和高度,使用這些圖像創建一個numpy陣列,並將Pinterest對應區域的值更改爲每個圖像的值。
此程序是否正常工作,更重要的是沒有找到更容易解決此問題的方法嗎?
我有幾張圖像,我想要在每張圖像中添加一個新圖像8個圖像,每行5個並行使用Python中的openCV。如何從openCV中的現有圖像中最好地創建新圖像
奇怪的是,我沒有找到直接解決這個問題的答案。從我在openCV方面的多餘知識中,我現在會計算應該複製現有圖像的圖像的寬度和高度,使用這些圖像創建一個numpy陣列,並將Pinterest對應區域的值更改爲每個圖像的值。
此程序是否正常工作,更重要的是沒有找到更容易解決此問題的方法嗎?
在OpenCV的Python API中讀取圖像時,會得到Numpy數組。 Numpy具有vstack()
和hstack()
函數,您可以使用它們垂直和水平地堆疊數組(圖像)。
讓我們打開兩個圖像的OpenCV:
import cv2
import numpy as np
knight = cv2.imread('knight.jpg', cv2.IMREAD_GRAYSCALE)
要使用在numpy的堆疊,有限制上取決於stackng軸圖像尺寸(垂直/水平),所以對於這個形象,我會用cv2.resize()
得到正確的尺寸
queen = cv2.imread('queen.jpg', cv2.IMREAD_GRAYSCALE)
queen = cv2.resize(queen, (525, 700))
讓我們通過堆疊2個騎士
col_1 = np.vstack([knight, knight]) # Simply put the images in the list
# I've put 2 knights as example
現在讓我們把第二列2個皇后
col_2 = np.vstack([queen, queen])
讓我們把這兩列共同構成第一列,但是這我們將使用hstack()
那
collage = np.hstack([col_1, col_2]
的Et瞧,2×2拼貼畫,您可以適應您的需求。請注意,在堆疊中傳遞的圖像必須是相同的或任何東西,只要尊重尺寸,就可以傳入任何圖像列表。
如果有人發現它很有用,下面是一個簡單的例子,它概括了@ bakkal的代碼,用於創建一個任意圖像數量的拼貼。它創建一個拼貼(爲了簡單起見,一個kxk
正方形拼貼,並且所有圖像被假定爲具有相同大小 - ow,不要忘記調整圖像的大小!)從圖像目錄開始,首先水平堆疊圖像創建k
行,然後垂直堆疊行以創建最終畫布。
import os
def create_collages(image_dir):
image_paths = os.listdir
n = len(image_paths)
# find nearest square
collage_size = int(math.floor(math.sqrt(len(good_paths))))
# horizontally stacking images to create rows
rows = []
k = 0 # counter for number of rows
for i in range(collage_size**2):
if i % collage_size == 0: # finished with row, start new one
if k > 0:
rows.append(cur_row)
cur_row = cv2.imread(os.path.join(image_dir, image_paths[i]))
k += 1
else: # continue stacking images to current row
cur_img = cv2.imread(os.path.join(image_dir, image_paths[i]))
cur_row = np.hstack([cur_row, cur_img])
# vertically stacking rows to create final collage.
collage = rows[0]
for i in range(1, len(rows)):
collage = np.vstack([collage, rows[i]])
return collage
不,這是正確的方法,並沒有一個更容易。你可以從[這裏](http://stackoverflow.com/a/35683236/5008845)得到這個想法。基本上創建足夠大的目標圖像,並將每個圖像複製到正確的位置。 – Miki
thx,爲答案。然而,我不能僅僅通過評論來回答這個問題。也許你可以將它轉換爲常規響應? –
你可以用自己的實例來回答自己,然後接受你自己的答案。我無法在Python中創建一個工作示例,因此我不會回答。很高興幫助 – Miki