簡體   English   中英

將透明徽標添加到 2D 16 位圖像數組 python openCV2

[英]Add transparent logo to 2D 16bit image array python openCV2

我正在嘗試將透明徽標添加到現有圖像數組中。 它工作正常,只是我失去了透明度並被替換為黑色。 我認為在調整圖像大小時會發生這種情況。 這是我的代碼:

import cv2
import numpy as np

def add_logo(array):

    logo = cv2.imread("resources/logo/logo.png", 0)
    logo = np.array(logo, dtype=np.uint16)
    logo *= 256
    scale_percent = 
    width = int(logo.shape[1] * scale_percent / 100)
    height = int(logo.shape[0] * scale_percent / 100)
    dim = (width, height)
    logo = cv2.resize(logo, dim, interpolation = cv2.INTER_AREA)
    #cv2.imwrite('02.png',logo)
    print(array.shape, logo.shape)
    x_offset = y_offset = 50
    array[y_offset:y_offset+logo.shape[0],
                x_offset:x_offset+logo.shape[1]] = logo

    return array


imgs = get_images_from_xxxx()
edited = add_logo(imgs[0])
cv2.imwrite('01.png',edited)

我也嘗試過這個解決方案,但我不適用於我的上下文,因為除了添加徽標外,原始數組形狀或數據不會更改非常重要。

這是我得到的圖像的一部分:但我不需要黑色背景,因為原始徽標是透明的。 抱歉不得不剪掉標志!

輸出

如果有幫助,這里是傳遞給 add_logo 的數組的打印,它是一個 numpy 數組:

[[3505 3514 3606 ... 4622 4781    0]
 [3566 3507 3503 ... 4587 4386    0]
 [3522 3503 3453 ... 4584 4434    0]
 ...
 [3435 3428 3428 ... 3721 3779    0]
 [3451 3418 3455 ... 3829 3877    0]
 [   0    0    0 ...    0    0    0]]

print(array.shape, logo.shape)的輸出:

(1721, 912) (378, 304)

任何想法都非常感謝。 :)

您的問題有點棘手,因為您還需要加載透明度,並且希望以灰度顯示,但這並不困難。

首先將圖像加載為帶有 alpha 的彩色圖像

logo = cv2.imread("resources/logo/logo.png", cv2.IMREAD_UNCHANGED)

然后轉換為灰色並使用 alpha 作為掩碼(任何透明為 0 否則為 255)

logoGrey = cv2.cvtColor(logo[:,:,0:3], cv2.COLOR_BGR2GRAY)
mask = logo[:,:,3]
# here goes your changes to logoGrey which is equivalent logo in your code

現在你有了這兩樣東西,副本來了:

maskIdx = (mask != 0)
array[y_offset:y_offset+logo.shape[0],
            x_offset:x_offset+logo.shape[1]][maskIdx] = logoGrey[maskIdx] 

這應該只復制掩碼中的實心像素(或基本上不是 0 的任何像素)

我無法測試它,因為我在另一台計算機上,所以我希望我沒有錯過任何東西。 如果您有任何疑問,請給我留言

暫無
暫無

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

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