PyCharm中Python3.9读取WSQ图像出现哈夫曼表全1编码警告如何解决?
WSQ图像读取警告问题解决方案
PyPI发布的wsq库底层为C语言实现,你检索到的Java代码中的同款警告,是两类实现都遵循WSQ规范做的合规性校验导致的,不存在依赖Java的情况,你收到的提示仅为警告,不属于代码运行错误,默认不会中断执行。
1 排查环境差异导致的运行中断
- 确认PyCharm项目使用的Python解释器与jupyter-notebook使用的解释器一致:在jupyter中执行
import sys; print(sys.executable)获取解释器路径,和PyCharm右下角显示的当前项目解释器路径做对比,路径完全一致才是同一个环境,避免多环境下wsq库版本不同导致的差异。 - 检查是否开启了警告转错误配置:如果代码直接中断退出,查看PyCharm运行配置中是否添加了
-W error启动参数,或是代码中存在warnings.filterwarnings("error")的全局配置,删除对应配置即可恢复正常运行。
2 改用wsq库原生读取接口
matplotlib.image.imread为通用图像读取封装,内部会额外触发格式合规校验,直接调用wsq库原生解码接口可跳过多余校验,性能也更高:
import wsq with open(imagePath, 'rb') as f: wsq_bytes = f.read() # 直接返回uint8格式的numpy数组,和imread输出格式完全兼容 imageArray = wsq.decode(wsq_bytes)
3 针对性屏蔽警告信息
如果警告输出影响日志统计,可以在读取代码块中临时屏蔽该类警告,不会影响其他代码的警告提示:
import warnings import wsq with warnings.catch_warnings(): warnings.filterwarnings("ignore", message=".*A code in the hufftable contains an all 1's code.*") with open(imagePath, 'rb') as f: wsq_bytes = f.read() imageArray = wsq.decode(wsq_bytes)
4 内存级格式转换方案
如果上述方案都无法满足需求,可将你已有的C/C++ WSQ转PGM逻辑封装为Python扩展,或是通过ctypes直接调用转换函数,全程在内存中完成格式转换,不会生成本地PGM文件,也没有额外的磁盘IO开销,性能和直接读取WSQ图像基本一致。
内容的提问来源于stack exchange,提问作者Darrell Hougen
相关产品推荐
相关产品推荐

