3

我创建了这样的灰度图像

def create_new_image(size, luminance):
    width, height = size
    black_frame = int(luminance) * np.ones((width, height, 1), dtype=np.uint8)
    return black_frame

其中亮度是 [0, 255] 的元素

我已经使用 imageio 保存了图像

def save_image(image, output_path):
    imageio.imwrite(output_path, image)

output_path类似于 /valid_path/img.jpg的地方

现在我想加载我的灰度图像:

img = imageio.imread(file, format ='jpg')

但我得到的是语法错误。

raise SyntaxError("not a JPEG file")
  File "<string>", line None
SyntaxError: not a JPEG file

如果我不指定格式,我会收到另一个错误。

    "Could not find a format to read the specified file in %s mode" % modename
ValueError: Could not find a format to read the specified file in single-image mode

为什么?谢谢

4

4 回答 4

3

你可以试试 :

def save_image(image, output_path):
    imageio.imwrite(output_path, format= "jpg", image)

明确声明它是 jpg 文件。

于 2020-03-23T17:13:07.247 回答
1

JPEG 文件(压缩图像)以始终包含标记代码十六进制值 FF D8 FF 的图像标记开始。它没有嵌入文件的长度,因此我们需要找到JPEG预告片,即FF D9。

使用此页面上的链接查看文档。

例如,使用十六进制查看器(例如Hex Viewer)打开 jpeg 图像,您应该会看到如下内容:

在此处输入图像描述

解决方案:换句话说,尝试在将文件保存为 JPEG 之前将标题添加到文件中,应该可以解决您的问题。

可以在此处找到包含 API 文档的页面。在文档之后,您应该找到正确的指令,让您指定保存格式(正如@Meto 在答案中指出的那样)。

结论:解决方案只是在将图像物理写入硬盘时指定格式:

imageio.imwrite(uri, im, format=None, **kwargs)

在你的情况下format=jpg

而且,

 imageio.show_formats()

显示格式良好的可用格式列表。

结论,只是尝试更换

imageio.imwrite(output_path, image)

imageio.imwrite(output_path, image, format ='jpg' )

请注意,每个答案中的解决方案总是相同的。我刚刚添加了指定格式会发生什么(即,只写正确的标题)。

于 2020-03-19T09:29:52.053 回答
0

您需要确定您的文件是否真的保存为 JPG 文件。在 Linux/Mac 上,您可以使用file命令来验证这一点。

例如,下面的命令确认fireside.jpg是一个 JPEG 文件:

# file fireside.jpg
fireside.jpg: JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, baseline, precision 8, 2048x1365, components 3

如果文件未保存为 JPG,请尝试指定 file format="jpg" 为

imageio.imwrite(output_path, image, format ='jpg')
于 2020-03-25T23:25:12.340 回答
-1

这有效(在 jupyter notebook 中验证)

import numpy as np
import imageio

def create_new_image(size, luminance):
    width, height = size
    black_frame = int(luminance) * np.ones((width, height, 1), dtype=np.uint8)
    return black_frame

def save_image(image, output_path):
    imageio.imwrite(output_path, image)

img = create_new_image((256, 256), 125)
save_image(img, "test.jpg")
img1 = imageio.imread("test.jpg", format ='jpg')
于 2020-03-25T11:29:37.367 回答