如何使用numpy将R,G,B值提取到单独的数组中

问题描述

如果您希望它以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]用来检查给定图像中的通道数。

解决方法

假设我有一幅具有一定尺寸的图像(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,j][1])
            R = np.append(R,j][2])

但是正如预期的那样,这非常慢,如何在内置函数中使用numpy做到这一点?