python - 将 3D 数组图像转换为 2D 数组
问题描述
我正在尝试通过导入图像。我的from tensorflow.keras.preprocessing import image
图像是我写在纸上的手写数字,然后我通过手机从中拍摄了一张照片,然后将其尺寸更改为 28*28:
我使用了以下代码:
img_width, img_height = 28, 28
img = image.load_img('rgb_seven.jpeg', target_size=(img_width, img_height))
img_tensor = image.img_to_array(img)
img_tensor.shape
形状结果是:
(28, 28, 3)
似乎图像被加载为3D 数组。我需要一个二维数组,所以我这样做:
x_image = img_tensor.reshape(len(img_tensor),-1)
x_image.shape
结果是:
(28, 84)
为什么是84?我需要 28,因为我想将其展平以作为输入层插入。
什么是问题?
解决方案
您应该使用加载图像color_mode='grayscale'
img = image.load_img('rgb_seven.jpeg', color_mode='grayscale', target_size=(img_width, img_height))
它会给你形状(28, 28, 1)
然后使用x_image = img_tensor.reshape(28, 28)
会给你形状(28, 28)
你得到形状的原因(28, 84)
是因为reshape()
不会删除维度,所以如果你想用它img_tensor.reshape(28,-1)
来重塑数组,(28, 28, 3)
它将返回一个数组作为组合最后两个维度,因此你得到形状(28, 28 * 3)
推荐阅读
- python - 在 Anaconda Navigator 中不显示 Pip 安装的软件包
- java - 在 JavaFX 2020 中嵌入 JOGL 或 LibGDX
- c - 为什么这个 c 程序要像这样转换成汇编程序?
- android - 未解决的参考:RecyclerView 尝试继承 Adapter
- c - openmp 并行程序比串行程序慢得多
- c# - 在 OWIN 自托管中使用集成的 Windows 身份验证发送大型 POST 请求
- javascript - 如何在 React useRef 中设置 refs
- ios - 使用 Firebase 登录 Twitter iOS 的 OAuthProvider 有错误的构造函数
- python - 如何在 Spyder 4 中禁用关键字/文本建议?
- sql - SQL - 将表中的行组显示为列