[英]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.