簡體   English   中英

如何使用 numpy 將 R、G、B 值提取到單獨的數組中

[英]How to extract R,G,B values with numpy into seperate arrays

假設我有一個尺寸為(1920, 1080, 3) ,我想將 R,G,B 值提取到單獨的數組R , G, B 我試着這樣做

for i in range(image.shape[0]):
        for j in range(image.shape[1]):
            B = np.append(B, image[i, j][0])
            G = np.append(G, image[i, j][1])
            R = np.append(R, image[i, j][2])

但正如預期的那樣,這很慢,我如何在內置函數中使用 numpy 來做到這一點?

如果您希望以OpenCV方式使用它,那么您可以使用cv2.split() ,記住圖像的通道:

b, g, r    = cv2.split(image) # For BGR image
b, g, r, a = cv2.split(image) # for BGRA image

或者,如果您可能喜歡直接numpy格式,那么您可以直接使用[根據@igaurav的評論,這似乎更有效]

b, g, r    = image[:, :, 0], image[:, :, 1], image[:, :, 2] # For RGB image
b, g, r, a = image[:, :, 0], image[:, :, 1], image[:, :, 2], image[:, :, 3] # for BGRA image

您可以使用np.shape[2]來檢查給定圖像中的通道數。

dsplit它。

import numpy as np

def channelSplit(image):
    return np.dsplit(image,image.shape[-1])

[B,G,R]=channelSplit(image)

這適用於RGB或RGBA圖像。

這對我有用:

def split_channels(im: np.ndarray):
    assert len(im.shape) == 3 and im.shape[-1] == 3
    return np.squeeze(np.split(im, im.shape[-1], -1), axis=-1)

請注意, np.split本身是不夠的,它會給你留下一個(M, N, 1)圖像。 但是如果你想要(M, N) ,那么squeeze可以了。

如果您有其他情況,您可以刪除assert

暫無
暫無

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

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