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

OpenCV Python像素赋值异常:设置BGR[255,0,0]却出现非预期颜色

OpenCV设置像素值后保存结果不符的原因及解决办法

问题原因

  • JPEG有损压缩的影响:你保存图像时使用的JPEG是有损压缩格式,压缩算法会为了减小文件大小对像素值进行近似处理,边缘区域的压缩误差通常更明显,这就是你看到角落像素偏差更大的原因。
  • 潜在的数据类型转换问题:虽然cv2.imread默认返回uint8类型图像,但如果原图像存在特殊编码,赋值时可能出现隐式类型转换导致数值偏差,但你的情况主要是压缩导致的。

解决方案

  1. 使用无损格式保存图像
    PNG是无损压缩格式,能完整保留像素的原始值,修改保存代码即可:

    import cv2
    
    img1 = cv2.imread('Assets/chess.jpg', cv2.IMREAD_COLOR)
    # 用切片批量设置像素,比循环更高效可靠
    img1[20:50, 20:50] = [255, 0, 0]
    # 保存为PNG格式
    cv2.imwrite('Assets/new_chess.png', img1)
    
  2. 优化JPEG压缩质量(若必须用JPEG)
    如果需要保存为JPEG,可以设置最高压缩质量来最小化失真:

    # 设置JPEG质量为100(范围0-100,值越高质量越好)
    cv2.imwrite('Assets/new_chess.jpg', img1, [cv2.IMWRITE_JPEG_QUALITY, 100])
    

    注意:即使质量设为100,JPEG仍会存在轻微的、无损压缩无法避免的偏差,无法达到PNG的准确性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 23:27:45