【问题标题】:Python imread bug: "Unsupported BMP bitfields layout"Python 读取错误:“不支持的 BMP 位域布局”
【发布时间】:2016-06-30 05:06:19
【问题描述】:

我似乎在 scipy.misc.imread 中遇到了一个错误,我正在寻找解决方法。这是错误报告的片段:

from scipy.misc import imread
im = imread('380.bmp')
...

C:\Anaconda3\lib\site-packages\PIL\BmpImagePlugin.py in _bitmap(self, header, offset)
145                     raw_mode = MASK_MODES[(file_info['bits'], file_info['rgb_mask'])]
146                 else:
--> 147                     raise IOError("Unsupported BMP bitfields layout")
148             else:
149                 raise IOError("Unsupported BMP bitfields layout")

OSError: Unsupported BMP bitfields layout

我可以在图像查看器中毫无问题地打开图像,所以我确定它没有损坏。

主要问题是:imread 的最佳替代方案是什么,以便我可以解决这个问题?或者,如果您知道修复 imread 的方法,那也很好。

顺便说一句,我在 Anaconda 2.4.1(64 位)中使用 Python 3.5.1

【问题讨论】:

  • 您可以在命令行中运行 ImageMagick,使用此命令 convert StupidBrokenPieceOfMicrosoftJunk.bmp sensible.png 将损坏的 BMP 文件转换为更漂亮的 PNG
  • 只是为了确认 ImageMagick 为您转换它没有问题 - 我测试了它。如果您有很多不满意的 BMP 文件,您可以运行 mogrify -format png *.bmp,这将在您当前目录中生成所有 BMP 文件的 PNG 格式副本 - 我想您可以在 Python 启动脚本中执行此操作。
  • @MarkSetchell 感谢您的提示。 mogrification 实际上是我最终要做的(我有几百个 bmps 可以使用)。这是一个很好的解决方法,但我希望这个问题能引起 pylab 人的注意......
  • 我很高兴 - 很高兴它为你解决了。祝你的项目好运!

标签: python image imread


【解决方案1】:

我在使用 PIL.Image 时遇到了同样的错误。我使用 cv2 绕过了这个问题。 我的代码是这样的:

import cv2 #pip install opencv-python
from PIL import Image #pip install pillow
temp_img = cv2.imread(filename.bmp)
color_corrected = cv2.cvtColor(temp_img, cv2.COLOR_BGR2RGB)
img = Image.fromarray(color_corrected)

祝你好运。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-08
    • 1970-01-01
    • 1970-01-01
    • 2021-01-25
    • 2018-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多