簡體   English   中英

使用opencv在透明背景上覆蓋另一個圖像

[英]Overlaying an image over another image both with transparent background using opencv

我正在嘗試使用opencv將圖像放置在另一個圖像之上。兩個圖像都有透明的背景。 這是我正在嘗試的代碼

s_img = cv2.imread("obama2.png", -1)
l_img = cv2.imread('obama.png',-1)
x_offset = 162
y_offset = 69

y1, y2 = y_offset, y_offset + s_img.shape[0]
x1, x2 = x_offset, x_offset + s_img.shape[1]

alpha_s = s_img[:, :, 3] / 255.0
alpha_l = 1.0 - alpha_s

for c in range(0, 3):
    l_img[y1:y2, x1:x2, c] = (alpha_s * s_img[:, :, c] +
                              alpha_l * l_img[y1:y2, x1:x2, c])
cv2.imwrite('final.png',l_img)

obama.png obama.png

obama2.png 在此處輸入圖片說明

final.png 在此處輸入圖片說明

我期望第二個obama2.png在obama.png之上(類似於imagemagick / libvips中的復合函數)。

我該怎么做才能獲得想要的圖像

這給了我想要的解決方案,但如果可能的話,會選擇更好的解決方案

    s_img = cv2.imread("obama2.png", -1)
    l_img = cv2.imread('obama.png',-1)
    for i in range(0,s_img.shape[0]):
        for j in range(0,s_img.shape[1]):   
            if s_img[i][j][3]!=0:
                l_img[i+y_offset][j+x_offset][0:3] = s_img[i][j][0:3]
                l_img[i+y_offset][j+x_offset][3] = 255

    cv2.imwrite('final2.png',l_img)

編輯:看起來我錯過了一些基本的東西。 我還必須在循環時考慮alpha通道,因為背景圖像也具有透明度。

s_img = cv2.imread("obama2.png", -1)
l_img = cv2.imread('obama.png',-1)
x_offset = 162
y_offset = 69

y1, y2 = y_offset, y_offset + s_img.shape[0]
x1, x2 = x_offset, x_offset + s_img.shape[1]

alpha_s = s_img[:, :, 3] / 255.0
alpha_l = 1.0 - alpha_s

for c in range(0, 4):
    l_img[y1:y2, x1:x2, c] = (alpha_s * s_img[:, :, c] +
                              alpha_l * l_img[y1:y2, x1:x2, c])
cv2.imwrite('final.png',l_img)

抱歉,我不太了解OpenCV。 但是我認為您可能已經忘記了將obama2圖像的寬度減去放置位置的一半。 偏移量是相對於obama2圖像的左上角相對於obama圖像的左上角的。 您可能測量到了臉部中心,在奧巴馬圖像上大約為x = 162。

但是,如果可以使用Imagemagick,該過程將非常簡單:

convert obama.png obama2.png -geometry +82-6 -compose over -composite result.png


在此處輸入圖片說明

-geometry參數僅定義obama2圖像相對於obama圖像左上角的偏移量。 如果我在奧巴馬圖像中測量臉部中心,則大約x = 176。 因此,我必須減去obama2的一半寬度,即x = 192/2 = 96。 因此,偏移量將為x = 176-96 = 80。 我將其調整為82,並設置y = -6使其略微向上移動。

如果您需要Python解決方案,則可以使用基於Imagemagick的Wand

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM