opencv的颜色通道问题 & rgb & bgr

文章目录

opencv是按bgr格式读取,plt是按rgb格式读取。

🌕原图

现给出一个图片reg.jpg进行测试:

🌕opencv读取该图片然后显示和保存

python 复制代码
import cv2
import numpy as np
import matplotlib.pyplot as plt


image_bgr = cv2.imread("red.jpg")
cv2.imshow("Original Image (BGR)", image_bgr)
cv2.imwrite("output_bgr.jpg", image_bgr)  # 保存为原始 BGR 格式

🌙imshow显示和imwrite保存的结果

imshow显示的结果:

imwrite保存的output_bgr.jpg

不是说opencv是按bgr顺序读取吗? 为什么显示和保存的代码都没有问题?

🌙用plt显示opencv读取的图片

python 复制代码
import cv2
import numpy as np
import matplotlib.pyplot as plt


image_bgr = cv2.imread("red.jpg")
cv2.imshow("Original Image (BGR)", image_bgr)
cv2.imwrite("output_bgr.jpg", image_bgr)  # 保存为原始 BGR 格式

# 新增plt显示Opencv读取的代码
plt.subplot(1,1,1);plt.imshow(image_bgr);plt.axis('off');plt.title('bgr')
plt.show()

发现imshow显示的是正常的但是plt显示的是不正常的。

🌙原理和结论

原因是:

python 复制代码
opencv的imshow和imwrite让我们看到的图像颜色是RGB的,但其实其存储是按BGR来存储的。

opencv遵循的是bmp位图格式,即存储阵列为BGR,通道按BGR排列,imshow和imwrite会将通道自动转为RGB。所以到的imshow和imwrite结果是正常的。

python 复制代码
读取前图片状态: r g b 
读取后未显示前的图片状态:b g r 
imshow显示与imwrite保存后的图片状态:r g b

plt读取的是 读取后未显示前的图片状态 ,此时图片通道顺序是b g r,但是plt不知道,它只把第一个通道当作r通道显示,所以最终显示的颜色颠倒。

🌕参考文章

CV2逐步学习-1.imread()详解+cvtColor()颜色空间转换

相关推荐
weixin_446260852 小时前
LocalAI:一个免费开源的AI替代方案,让创意更自由!
人工智能·开源
CAE3202 小时前
基于机器学习的智能垃圾短信检测超强系统
人工智能·python·机器学习·自然语言处理·垃圾短信拦截
骄傲的心别枯萎2 小时前
RV1126 NO.37:OPENCV的图像叠加功能
人工智能·opencv·计算机视觉·音视频·视频编解码·rv1126
HyperAI超神经2 小时前
解决蛋白质构象异质性的原子级建模挑战!David Baker团队PLACER框架解析
人工智能·深度学习·ai·ai4s·蛋白质结构
TG:@yunlaoda360 云老大5 小时前
腾讯WAIC发布“1+3+N”AI全景图:混元3D世界模型开源,具身智能平台Tairos亮相
人工智能·3d·开源·腾讯云
这张生成的图像能检测吗5 小时前
(论文速读)Fast3R:在一个向前通道中实现1000+图像的3D重建
人工智能·深度学习·计算机视觉·3d重建
心 爱心 爱5 小时前
Shape-Guided Dual-Memory Learning for 3D Anomaly Detection 论文精读
计算机视觉·3d·异常检测·工业异常检测·三维异常检测·多模态工业异常检测·二维异常检测
兴趣使然黄小黄8 小时前
【AI-agent】LangChain开发智能体工具流程
人工智能·microsoft·langchain
出门吃三碗饭8 小时前
Transformer前世今生——使用pytorch实现多头注意力(八)
人工智能·深度学习·transformer
l1t8 小时前
利用DeepSeek改写SQLite版本的二进制位数独求解SQL
数据库·人工智能·sql·sqlite