以下代码将此错误输出到终端,但未停止执行: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透露,不久前Anaconda的libpng包有一个bug,可能会导致这个问题,并建议对其进行更新。我这样做没有任何效果,因此,为了更好地衡量,我还返回并确保在我的机器上安装了最新版本的libpng。再说一次,没有变化。
在此基础上,我尝试了许多不同的代码变体和操作条件,但仍然没有改变。具体来说,我试过:
.jpg
。错误不会弹出,显然是因为它不再使用libpng,但是图像仍然以NoneType的形式返回。cv2.IMREAD_GRAYSCALE
顺便说一句,我已经断断续续地使用OpenCV了两年多了,几乎没有什么问题,我的骄傲是,我无法得到如此简单/愚蠢的工作。我即将开始深入到libpng文档中,但我非常感谢您的任何评论或想法。
发布于 2019-01-08 08:54:03
如果在图像上运行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
https://stackoverflow.com/questions/54096034
复制