OpenCV Python像素赋值异常:设置BGR[255,0,0]却出现非预期颜色
OpenCV设置像素值后保存结果不符的原因及解决办法
问题原因
- JPEG有损压缩的影响:你保存图像时使用的JPEG是有损压缩格式,压缩算法会为了减小文件大小对像素值进行近似处理,边缘区域的压缩误差通常更明显,这就是你看到角落像素偏差更大的原因。
- 潜在的数据类型转换问题:虽然
cv2.imread默认返回uint8类型图像,但如果原图像存在特殊编码,赋值时可能出现隐式类型转换导致数值偏差,但你的情况主要是压缩导致的。
解决方案
使用无损格式保存图像
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)优化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
相关产品推荐
相关产品推荐

