对于我的生活,过去24小时我一直在努力。我正在做一个神经网络 - 将图像存储在一个4D阵列中。数组的第一个索引基本上是"样本"又名样品1,2,3等。尺寸2,3,4是128x128 x3 rgb图片。现在在这个过程中,我拍摄输入图像(不是128x128)并重新缩放它们。但是当我选择一个样本时,它将所有颜色通道混合在一起。所以我试着找出问题所在。
如果我只是调整图片大小并将数字数组(128x128x3)分配给变量,那么一切都是正常的'。如果我指定了'子阵列'对于较大的4维阵列,颜色通道会混淆。但是我可以恢复原始图片从255减去sameple的数组切片。
这是一个包含原始(1),调整大小(2),颜色通道混合(3),恢复(4)的代码片段。
我知道open cv和pyplot.imshow()使用不同的颜色通道,但事实上,将图片存储在较大的数组中是导致切换的原因 - 这让我感到困惑。一些指导意见将不胜感激。
我也可以" subratct"数组(img2-train [0])并得到一个全零的数组。那部分真的令人困惑。它们是相同的数字,但imshow()给出了2个完全不同的图像。
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()
答案 0 :(得分:2)
OpenCV
使用BGR
约定存储彩色图像
matplotlib
使用RGB
约定。
使用pyplot
显示图片时,您应该简单地翻转频道顺序:
plt.imshow(img[:,:,[2,1,0])
plt.imshow(train[0][:,:,[2,1,0])
...
或者,您可以使用cv2.imshow
答案 1 :(得分:1)
好的 - 这很奇怪。事实证明,当我将数据放入4-d数组时,Matplotlib出于某种原因不同地缩放数据。为了恢复我在#3中的原始图像,所有我不得不做的就是除以255.我在查看imshow()文档时通过一个受过教育的“猜测”来解决这个问题,这些文档表示数据被缩放到0到1之间。数据在0到255之间,我“手动”缩放。奇怪的行为,但在喂养神经网络时,你想确保你的数据不会以某种方式“调整”
第三个情节的“修复”只是:
plt.subplot(1,4,3)
train[0] = img2
plt.imshow(train[0]/255)