以下代码将该错误输出到终端,但不停止执行:libpng error: IEND: CRC error
import numpy as np
import cv2
import os
# image is stored in the same location as the python file
dir_path = os.path.dirname(os.path.realpath(__file__))
path = dir_path+'/test.png'
# img always gets set as a NoneType
img = cv2.imread(path)
一些Google-Fu透露,libac的Anaconda软件包在不久前存在一个错误,可能会导致此问题,因此建议对其进行更新。我这样做没有任何效果,因此,在很大程度上,我还回过头来确保我的计算机上安装了最新版本的libpng。同样,没有变化。
最重要的是,我尝试了代码的许多不同变体和操作条件,但仍然没有更改。具体来说,我已经尝试过:
.jpg
。该错误不会弹出,显然是因为它不再使用libpng,但是图像仍然以NoneType的形式返回。cv2.IMREAD_GRAYSCALE
顺便说一句,我已经使用OpenCV了两年多了,几乎没有遇到任何问题,而我无法获得如此简单/愚蠢的工作让我感到骄傲。我将开始研究libpng文档,但是,如果您有任何意见或想法,我将不胜感激。
答案 0 :(得分:1)
如果在图像上运行pngcheck
,它将告诉您IEND
块的校验和不正确:
pngcheck -v blank.png
输出
File: blank.png (79830 bytes)
chunk IHDR at offset 0x0000c, length 13
2560 x 1600 image, 32-bit RGB+alpha, non-interlaced
chunk IDAT at offset 0x00025, length 8192
zlib: deflated, 32K window, fast compression
chunk IDAT at offset 0x02031, length 8192
chunk IDAT at offset 0x0403d, length 8192
chunk IDAT at offset 0x06049, length 8192
chunk IDAT at offset 0x08055, length 8192
chunk IDAT at offset 0x0a061, length 8192
chunk IDAT at offset 0x0c06d, length 8192
chunk IDAT at offset 0x0e079, length 8192
chunk IDAT at offset 0x10085, length 8192
chunk IDAT at offset 0x12091, length 5937
chunk IEND at offset 0x137ce, length 0
CRC error in chunk IEND (computed ae426082, expected ae426080)
如果将文件以十六进制格式转储:
xxd image.png > hex
然后在任何常规编辑器中编辑最后一个字节以使其正确,您可以使用以下命令重建文件:
xxd -r < hex > recovered.png