首页 > 解决方案 > 如何仅根据 numpy 数组判断频道顺序?

问题描述

我有一个数据集,其中包括 800 个图像,所有图像都在 numpy 数组中。每张图像为 256x256,具有 3 个通道。我想找到通道顺序(即 RGB 或 BGR)。我不知道该怎么做。由于每个图像都是数组的形式,因此使用cv.imread或其他图像读取显然没有帮助。当我单独绘制通道时:

plt.imshow(image)
plt.title('Original Image')
plt.show()

x = image[:, :, 0]
plt.imshow(x)
plt.show()

y = image[:, :, 1]
plt.imshow(y)
plt.show()

z = image[:, :, 2]
plt.imshow(z)
plt.show()

我得到以下结果:

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

我不能根据上面的结果来判断频道顺序,那么我该如何找到答案呢?

标签: pythonpython-3.ximage

解决方案


这里发生了两件事......

首先,使用默认颜色图绘制单独的颜色通道会让您感到困惑,默认颜色viridis图引入了新的绿色和黄色阴影,完全不适合您的需求。因此,如果您尝试绘制单通道图像,只需使用如下灰度颜色图:

 plt.imshow(image, cmap='gray', vmin=0, vmax=255)

其次,如果第一个“原始”图像正确显示(我假设是这种情况),那么您可以放心,图像是 RGB 顺序的,因为这是matplotlib使用的。可能是原始图像不是您想要的 - 如果是这样,请更清楚您对图像的了解 - 即它应该主要是红色还是绿色,或者您知道它显示不正确。


推荐阅读