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

新手上路,请多包涵

假设我有一个尺寸为 (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 来做到这一点?

原文由 Sigma 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 590
2 个回答

如果你想让它以 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] 来检查给定图像中的通道数。

原文由 ZdaR 发布,翻译遵循 CC BY-SA 3.0 许可协议

dsplit 它。

 import numpy as np

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

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

这适用于 RGB 或 RGBA 图像。

原文由 Daniel F 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题