灰度图像不是 jpeg
Grayscale image not a jpeg
我创建了这样的灰度图像
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
为什么?
谢谢
JPEG 文件(压缩图像)以始终包含标记代码十六进制值 FF D8 FF 的图像标记开头。它没有嵌入文件的长度,因此我们需要找到 JPEG 预告片,即 FF D9。
请参阅 this page 中使用 link 的文档。
例如,使用十六进制查看器(例如 Hex Viewer)打开 jpeg 图像,您应该看到如下内容:
解决方法:换句话说,尝试在文件中添加header,然后再将其保存为JPEG,应该可以解决您的问题。
可以找到包含 API 文档的页面 here。按照文档,您应该找到使您指定保存格式的正确说明(正如@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' )
请注意每个答案的解决方案始终相同。我刚刚添加了指定格式时发生的情况(即,只写正确的 header)。
你可以试试:
def save_image(image, output_path):
imageio.imwrite(output_path, format= "jpg", image)
明确声明它是一个 jpg 文件。
这有效(在 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')
您需要确定您的文件是否真的保存为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,请尝试指定文件格式="jpg" 为
imageio.imwrite(output_path, image, format ='jpg')
我创建了这样的灰度图像
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
为什么? 谢谢
JPEG 文件(压缩图像)以始终包含标记代码十六进制值 FF D8 FF 的图像标记开头。它没有嵌入文件的长度,因此我们需要找到 JPEG 预告片,即 FF D9。
请参阅 this page 中使用 link 的文档。
例如,使用十六进制查看器(例如 Hex Viewer)打开 jpeg 图像,您应该看到如下内容:
解决方法:换句话说,尝试在文件中添加header,然后再将其保存为JPEG,应该可以解决您的问题。
可以找到包含 API 文档的页面 here。按照文档,您应该找到使您指定保存格式的正确说明(正如@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' )
请注意每个答案的解决方案始终相同。我刚刚添加了指定格式时发生的情况(即,只写正确的 header)。
你可以试试:
def save_image(image, output_path):
imageio.imwrite(output_path, format= "jpg", image)
明确声明它是一个 jpg 文件。
这有效(在 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')
您需要确定您的文件是否真的保存为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,请尝试指定文件格式="jpg" 为
imageio.imwrite(output_path, image, format ='jpg')