【发布时间】:2020-07-07 01:59:49
【问题描述】:
我有一个数据集,其中包含一堆关于它们的高度和宽度大小不同的 png 文件。
我使用以下代码读入此文件以获取 numpy 数组。在这种情况下,它是 2D。但实际上我想得到一个存在图像数量 n、图像高度 h 和宽度 w 的 3D 数组。
import os.path
import glob
import numpy as np
def open_images(images_directory):
pattern_to_match = os.path.join(images_directory, "*.png")
png_files = (x for x in glob.iglob(pattern_to_match)
if os.path.isfile(x))
for current_png_filename in png_files:
print("Opening file", current_png_filename)
with open(current_png_filename, "rb") as current_png_file:
data = current_png_file.read()
return np.frombuffer(data, dtype=np.uint8, offset=16)\
.reshape(-1, 3)\
.astype(np.float32)
pass
directory_to_search = r"C:\Users\tobis\OneDrive\Desktop\Masterarbeit\data\2017-IWT4S-HDR_LP-dataset\crop_h1"
open_images(directory_to_search)
目前,我得到一个带有 shpae 的数组,如下所示: (21559, 3)。我认为第一个数字是宽度和高度的组合,最后一个是 RGB 值。我想得到一个看起来像这样的数组:(n, h, w)。
有没有办法得到这样的数组?不幸的是,我有两个未知的维度。好像是这个问题……
【问题讨论】:
-
这:不同尺寸的高度和宽度将是最大的问题。 numpy 数组是统一的,因此您要么必须识别最大的图像,然后对其余图像进行零填充,要么选择另一种结构来存储它们
-
这不是宽度 * 高度,你很幸运你有 12 个字节的倍数。 PNG 不是没有元数据的平面文件。使用 PIL、scipy、matplotlib、cv2、libpng 或其他一些库来正确读取文件(或实施您自己的本土解决方案,但要正确执行)。
-
21559是一个素数,因此它不太可能代表图像。
标签: python arrays image numpy image-processing