Opencv 为什么pyplot.imshow()会更改数组中的颜色通道

Opencv 为什么pyplot.imshow()会更改数组中的颜色通道,opencv,numpy,image-processing,matplotlib,Opencv,Numpy,Image Processing,Matplotlib,在过去的24小时里,我一直在为此奋斗。我正在做一个神经网络——将图像存储在4D阵列中。数组的第一个索引基本上是“样本”即样本1、2、3等。二聚体2、3、4是128x128 x3 rgb图片。现在在这个过程中,我拍摄输入图片(不是128x128)并重新缩放它们。但是当我挑选一个样品时,它把所有的颜色通道都混在一起了。所以我试图找出问题出在哪里 如果我只是调整图片大小并将number数组(128x128x3)分配给一个变量,那么一切都是“正常”的。如果我将“子阵列”分配给较大的4-d阵列,则颜色通道

在过去的24小时里,我一直在为此奋斗。我正在做一个神经网络——将图像存储在4D阵列中。数组的第一个索引基本上是“样本”即样本1、2、3等。二聚体2、3、4是128x128 x3 rgb图片。现在在这个过程中,我拍摄输入图片(不是128x128)并重新缩放它们。但是当我挑选一个样品时,它把所有的颜色通道都混在一起了。所以我试图找出问题出在哪里

如果我只是调整图片大小并将number数组(128x128x3)分配给一个变量,那么一切都是“正常”的。如果我将“子阵列”分配给较大的4-d阵列,则颜色通道会混淆。但是,我可以通过从255减去sameple的数组切片来恢复原始图片

下面是一个代码片段,其中包含原始(1)、调整大小(2)、颜色通道混合(3)和恢复(4)

我知道open cv和pyplot.imshow()使用不同的颜色通道,但事实上,将图片存储在更大的数组中似乎是导致切换的原因——这让我感到困惑。请提供一些指导

此外,我还可以对数组进行“细分”(img2训练[0]),并得到一个全零数组)。那部分真的很混乱。它们是相同的数字,但imshow()给出了两个完全不同的图像

import numpy as np
import cv2
import matplotlib.pyplot as plt
img = cv2.imread(<path to your pic>)
img2 = cv2.resize(img, (128, 128))
train = np.ndarray(shape=(1,128, 128,3))
plt.subplot(1,4,1)
plt.imshow(img)
plt.subplot(1,4,2)
plt.imshow(img2)
plt.subplot(1,4,3)
train[0] = img2
plt.imshow(train[0])
plt.subplot(1,4,4)
plt.imshow(255-train[0])
plt.show()
将numpy导入为np
进口cv2
将matplotlib.pyplot作为plt导入
img=cv2.imread()
img2=cv2.resize(img,(128128))
列车=np.ndarray(形状=(1128128,3))
plt.子地块(1,4,1)
plt.imshow(img)
plt.子地块(1,4,2)
plt.imshow(img2)
plt.子地块(1,4,3)
列车[0]=img2
plt.imshow(列车[0])
plt.子地块(1,4,4)
plt.imshow(255列[0])
plt.show()

OpenCV
matplotlib
使用
RGB
约定

使用
pyplot
显示图像时,只需翻转通道顺序即可:

 plt.imshow(img[:,:,[2,1,0])
 plt.imshow(train[0][:,:,[2,1,0])
 ...
或者,您可以使用
cv2.imshow
确定--这很奇怪。事实证明,当我将数据放入4-d数组时,Matplotlib出于某种原因以不同的方式缩放数据。为了在#3中恢复我的原始图像,我所要做的就是除以255。在查看imshow()文档时,我通过一个受过教育的“猜测”发现了这一点,该文档说数据被缩放到0到1之间。因为我所有的数据都在0到255之间,所以我“手动”缩放它。奇怪的行为,但在输入神经网络时,您希望确保您的数据不会以某种方式被“调整”

第三个绘图的“修复”仅为:

plt.subplot(1,4,3)
train[0] = img2
plt.imshow(train[0]/255)

反转通道不会返回原始图像。如果比较第二幅和第三幅图像,它们是相同的一组数字(如果减去它们,则得到零)。通过反转颜色通道,我得到了第三张“非彩色”图像(train[0,:,:,:,:,::-1)哇,就是这样。我几乎无法想象,如果按255缩放,图像怎么会看起来有点像样。我需要了解这里发生了什么……如果你知道,请给出一个链接。