将包含 jpeg 图像的文件夹转换为 hdf5

     2023-03-11     111

关键词:

【中文标题】将包含 jpeg 图像的文件夹转换为 hdf5【英文标题】:Convert a folder comprising jpeg images to hdf5 【发布时间】:2021-07-23 12:03:33 【问题描述】:

有没有办法在 Python 中将包含 .jpeg 图像的文件夹转换为 hdf5?我正在尝试建立一个用于图像分类的神经网络模型。谢谢!

【问题讨论】:

简短回答:是的。您必须将图像转换为 NumPy 数组数据(使用 opencv 或其他工具)。你知道怎么做吗? 如果您能提出建议,那就太好了。本质上,如果我可以将文件夹中的每个图像都转换为一个 numpy 数组,那就太好了! 【参考方案1】:

有很多方法可以处理和保存图像数据。这是读取 1 个文件夹中的所有图像文件并加载到 HDF5 文件中的方法的 2 种变体。这个过程的概要:

    计算图像数量(用于确定数据集的大小)。 创建 HDF5 文件(前缀:1ds_) 创建具有适当形状和类型(整数)的空数据集 使用glob.iglob() 循环图像。然后做: 阅读cv2.imread() 使用cv2.resize() 调整大小 复制到数据集img_ds[cnt:cnt+1:,:,:]

这是一种方法。需要考虑的其他事项:

    我在 1 个数据集中加载了所有图像。如果您有不同大小的图像,则必须调整图像大小。如果您不想调整大小,则需要将每个图像保存在不同的数据集中(相同的过程,但在循环内创建一个新数据集)。查看第二个with/as: 并循环将数据保存到第二个 HDF5(前缀:nds_) 我没有尝试捕获图像名称。您可以使用 1 个数据集上的属性来执行此操作,或者作为具有多个数据集的数据集名称。 我的图片是.ppm文件,所以需要修改glob函数为 使用*.jpg

以下更简单的版本(2021 年 3 月 16 日添加): 假设所有文件都在当前文件夹中,并将所有调整大小的图像加载到一个数据集(名为“图像”)。第二种方法在不调整大小的情况下将每个图像加载到单独的数据集中,请参见前面的代码。

import sys
import glob
import h5py
import cv2

IMG_WIDTH = 30
IMG_HEIGHT = 30

h5file = 'import_images.h5'

nfiles = len(glob.glob('./*.ppm'))
print(f'count of image files nfiles=nfiles')

# resize all images and load into a single dataset
with h5py.File(h5file,'w') as  h5f:
    img_ds = h5f.create_dataset('images',shape=(nfiles, IMG_WIDTH, IMG_HEIGHT,3), dtype=int)
    for cnt, ifile in enumerate(glob.iglob('./*.ppm')) :
        img = cv2.imread(ifile, cv2.IMREAD_COLOR)
        # or use cv2.IMREAD_GRAYSCALE, cv2.IMREAD_UNCHANGED
        img_resize = cv2.resize( img, (IMG_WIDTH, IMG_HEIGHT) )
        img_ds[cnt:cnt+1:,:,:] = img_resize

以下之前的代码(从 2021 年 3 月 15 日起):

import sys
import glob
import h5py
import cv2

IMG_WIDTH = 30
IMG_HEIGHT = 30

# Check command-line arguments
if len(sys.argv) != 3:
    sys.exit("Usage: python load_images_to_hdf5.py data_directory model.h5")

print ('data_dir =', sys.argv[1])
data_dir = sys.argv[1]
print ('Save model to:', sys.argv[2])
h5file = sys.argv[2]

nfiles = len(glob.glob(data_dir + '/*.ppm'))
print(f'Reading dir: data_dir; nfiles=nfiles')

# resize all images and load into a single dataset
with h5py.File('1ds_'+h5file,'w') as  h5f:
    img_ds = h5f.create_dataset('images',shape=(nfiles, IMG_WIDTH, IMG_HEIGHT,3), dtype=int)
    for cnt, ifile in enumerate(glob.iglob(data_dir + '/*.ppm')) :
        img = cv2.imread(ifile, cv2.IMREAD_COLOR)
        # or use cv2.IMREAD_GRAYSCALE, cv2.IMREAD_UNCHANGED
        img_resize = cv2.resize( img, (IMG_WIDTH, IMG_HEIGHT) )
        img_ds[cnt:cnt+1:,:,:] = img_resize

# load each image into a separate dataset (image NOT resized)    
with h5py.File('nds_'+h5file,'w') as  h5f:
    for cnt, ifile in enumerate(glob.iglob(data_dir + '/*.ppm')) :
        img = cv2.imread(ifile, cv2.IMREAD_COLOR)
        # or use cv2.IMREAD_GRAYSCALE, cv2.IMREAD_UNCHANGED
        img_ds = h5f.create_dataset('images_'+f'cnt+1:03', data=img)

【讨论】:

非常感谢!我想调整所有图像的大小并加载到单个数据集中。不过,我有几个问题。我在哪里/如何包含我的文件夹所在的路径?我不是 Python 效率(还),所以很抱歉我的问题很愚蠢。 我重用了一些使用命令行参数的代码。第一个参数是文件所在的文件夹,第二个参数是 HDF5 文件名。这样您就可以从任何目录读取图像并分配 HDF5 文件名和位置。我修改了我的帖子以简化代码并仅加载调整大小的图像。最终你会想让它更通用。【参考方案2】:

您可以通过在 Python 中使用 HDFql 执行以下操作来解决您的问题(HDFql 还支持 C、C++、Java、C#、R 和 Fortran):

import HDFql

cursor = HDFql.Cursor()

folder = "/home/dummy/images/"

HDFql.execute("create and use file images.h5")

HDFql.execute("show file \"%s\"" % folder)

while HDFql.cursor_next() == HDFql.SUCCESS:

    file = HDFql.cursor_get_char()

    print("File found: \"%s\"" % file)

    HDFql.cursor_use(cursor)

    HDFql.execute("show file size \"%s%s\"" % (folder, file))

    HDFql.cursor_next()

    size = HDFql.cursor_get_bigint()

    HDFql.cursor_use_default()

    HDFql.execute("create dataset \"%s\" as opaque(%d) values from binary file \"%s%s\"" % (file, size, (folder, file)))

HDFql.execute("close file")

有关更多信息,请查看说明 HDFql 功能的 reference manual 和 examples。

【讨论】:

如何将 SVG 文件转换为 JPEG?

...好地适应主题。我正在考虑将基于矢量的文件转换为JPEG图像。【问题讨论】:我无法提供转化应用推荐。但请不要使用JPEG。JPEG用于照片图像。改用PNG之类的东西。转换您将失去质量。您可以使 查看详情

怎么用abbyy将pdf转换为jpeg图像

参考技术A争议用abbyy将pdf转换成图片没有用过,不过可以使用转换工具进行,下面是大致的操作方法:一、进入迅捷在线转换页面,选择文档转换中的“pdf转图片”选项;二、点击添加文件按钮,将要转换的文件添加进来,再点... 查看详情

将大量 MP3 文件转换为 YouTube 视频,每个都使用相同的 JPEG 图像

】将大量MP3文件转换为YouTube视频,每个都使用相同的JPEG图像【英文标题】:ConvertingalargenumberofMP3filestovideosforYouTube,eachusingsametheJPEGimage【发布时间】:2020-06-0122:51:24【问题描述】:我正在寻找一种将大量MP3文件转换为视频的方法... 查看详情

怎么用abbyy将pdf转换为jpeg图像

...ABBYYFineReaderPro,进入新建任务页面。步骤二:点击转换为图像,选择要转换为图像的PDF文档,然后点击打开。步骤三:打开PDF文档之后,自动显示“正在保存图像”,同时出现存储对话框,在存储对话框中填写存储名称和保存位... 查看详情

将 YUV_420_888 转换为 JPEG 并保存文件导致图像失真

】将YUV_420_888转换为JPEG并保存文件导致图像失真【英文标题】:ConvertingYUV_420_888toJPEGandsavingfileresultsdistortedimage【发布时间】:2017-10-1618:02:04【问题描述】:我在我的gitrepo中使用了https://***.com/a/40152147/2949966中提供的ImageUtil类:htt... 查看详情

如何将画布图像“data:image/jpeg;base64,..”转换为普通图像文件 - javascript

】如何将画布图像“data:image/jpeg;base64,..”转换为普通图像文件-javascript【英文标题】:howtoconvertcanvasimage"data:image/jpeg;base64,.."tonormalimagefile-javascript【发布时间】:2015-02-2013:26:25【问题描述】:我有image=canvas.toDataURL("image/pn... 查看详情

将 png 转换为 jpeg 会增加图像大小

】将png转换为jpeg会增加图像大小【英文标题】:Convertingpngtojpegincreasesimagesize【发布时间】:2013-05-2911:20:19【问题描述】:当我将png转换为jpeg时,图像的大小会增加2%。为此,我正在使用imagemagick的转换命令。还能够通过保持白... 查看详情

abbyyfinereaderpdf15如何将页面保存为图像

...另存为选项,可将PDF页面保存为不同的文件类型,其中就包含了本文关注的重点——页面图像。二、可保存的图像类型如图3所示,ABBYYFineReaderPDF15可保存为的页面图像类型很多,比如位图、jpeg、png、tiff等。接下来,我们会针对j... 查看详情

保存为 HDF5 的图像没有着色

】保存为HDF5的图像没有着色【英文标题】:ImagessavedasHDF5arentcolored【发布时间】:2019-02-0517:29:09【问题描述】:我目前正在开发一个将文本文件和jpg图像转换为HDF5格式的程序。用HDFView3.0打开,好像只保存了灰度图。hdf=h5py.File("S... 查看详情

使用熊猫将 CSV 文件转换为 HDF5

】使用熊猫将CSV文件转换为HDF5【英文标题】:ConvertingCSVfiletoHDF5usingpandas【发布时间】:2014-06-1314:14:44【问题描述】:当我使用pandas将csv文件转换为hdf5文件时,生成的文件非常大。例如,一个170Mb的测试csv文件(23列,130万行)... 查看详情

将字节数组转换/显示为 bmp/jpeg 图像

】将字节数组转换/显示为bmp/jpeg图像【英文标题】:Convert/displaybytearraytobmp/jpegimage【发布时间】:2013-07-1707:28:46【问题描述】:首先,我问这个具体的问题,因为我已经阅读了很多关于这个主题的例子,但没有一个真正有帮助。... 查看详情

是否可以将 jpeg(或 png)类型的图像设置为 exe(C++)?

】是否可以将jpeg(或png)类型的图像设置为exe(C++)?【英文标题】:isitpossibletosetjpeg(orpng)typesofimagestoexe(C++)?【发布时间】:2014-01-1106:15:54【问题描述】:现在我正在编写一个开源项目(C++/MFC)并找到一个Jpeg类型的漂亮图像... 查看详情

将 HDF5 文件转换为其他格式

】将HDF5文件转换为其他格式【英文标题】:ConvertHDF5filetootherformats【发布时间】:2014-06-0720:45:19【问题描述】:我有一些HDF5文件的大文件集,我正在寻找一种将这些文件中的数据转换为XML、TXT或其他一些易于阅读的格式的有效... 查看详情

csharpc#将图像转换为jpeg(代码片段)

查看详情

PHP Imagick 类 - 将 JPEG 转换为渐进式 JPEG?隔行不工作

...间】:2013-10-0602:05:40【问题描述】:我正在尝试完成我的图像上传器,它利用imagick来处理各种图像类型。我试图开始工作的一件事是将jpeg文件转换为渐进式jpeg。我已经尝试了下面的代码, 查看详情

如何将 HDF5 文件转换为 Parquet 文件?

】如何将HDF5文件转换为Parquet文件?【英文标题】:HowdoesoneconvertanHDF5fileintoaParquetfile?【发布时间】:2017-05-2017:36:41【问题描述】:我已经使用pandas.HDFStore()通过pandas将大约800GB的巨大数据帧存储到HDF5中。importpandasaspdstore=pd.HDFStore... 查看详情

使用java将透明的gif / png转换为jpeg

...时间】:2010-10-0215:56:55【问题描述】:我想使用Java将gif图像转换为jpeg。它适用于大多数图像,但我有一个简单的透明gif图像:Inputgifimagehttp://img292.imageshack.us/img292/2103/indexedtesta 查看详情

将大型光栅图形图像(位图、PNG、JPEG 等)转换为非矢量 postscript

】将大型光栅图形图像(位图、PNG、JPEG等)转换为非矢量postscript【英文标题】:Convertlargerastergraphicsimage(bitmap,PNG,JPEG,etc)tonon-vectorpostscript【发布时间】:2010-04-2904:19:43【问题描述】:如何将大图转换成postscript?我曾经将位图转... 查看详情