You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

经cv2二值化后的JPEG图像出现非0/255像素值,是否正常?

问题分析与解决

你遇到的这个现象不是操作错误,核心原因出在JPEG格式的特性上。

具体原因

  • 用cv2.threshold生成的thresh数组本身确实只有0和255两种像素值,但调用cv2.imwrite保存为JPEG时,JPEG的有损压缩算法会对像素做近似处理,导致部分像素偏离0或255,出现中间值。
  • 要是换成PNG这类无损格式保存,就不会有这个问题——PNG会严格保留二值图的像素信息。

验证方法

你可以在保存前先检查thresh的像素值,比如加这段代码:

import numpy as np
# 输出数组里的唯一像素值
print(np.unique(thresh))

运行后会得到[0 255],证明阈值处理后的结果是符合预期的,问题出在JPEG保存环节。

解决办法

  • 优先换成PNG格式保存:
cv2.imwrite("C:\\Users\\***\\***\\Workspace\\Payment Advice 3 page - 3 - thresh.png", thresh)
  • 如果必须用JPEG,可提高压缩质量(最高设为100),尽量减少像素偏差:
cv2.imwrite("C:\\Users\\***\\***\\Workspace\\Payment Advice 3 page - 3 - thresh.jpg", thresh, [int(cv2.IMWRITE_JPEG_QUALITY), 100])

不过即使质量拉满,JPEG仍可能存在轻微偏差,无损格式是更可靠的选择。

内容的提问来源于stack exchange,提问作者Roshan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 22:10:47