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()颜色空间转换

相关推荐
MidJourney中文版7 分钟前
深度报告:中老年AI陪伴机器人需求分析
人工智能·机器人
王上上33 分钟前
【论文阅读41】-LSTM-PINN预测人口
论文阅读·人工智能·lstm
视觉人机器视觉41 分钟前
Visual Studio2022和C++opencv的配置保姆级教程
c++·opencv·visual studio
智慧化智能化数字化方案1 小时前
69页全面预算管理体系的框架与落地【附全文阅读】
大数据·人工智能·全面预算管理·智慧财务·智慧预算
PyAIExplorer1 小时前
图像旋转:从原理到 OpenCV 实践
人工智能·opencv·计算机视觉
Wilber的技术分享1 小时前
【机器学习实战笔记 14】集成学习:XGBoost算法(一) 原理简介与快速应用
人工智能·笔记·算法·随机森林·机器学习·集成学习·xgboost
19891 小时前
【零基础学AI】第26讲:循环神经网络(RNN)与LSTM - 文本生成
人工智能·python·rnn·神经网络·机器学习·tensorflow·lstm
burg_xun1 小时前
【Vibe Coding 实战】我如何用 AI 把一张草图变成了能跑的应用
人工智能
酌沧2 小时前
AI做美观PPT:3步流程+工具测评+避坑指南
人工智能·powerpoint
狂师2 小时前
啥是AI Agent!2025年值得推荐入坑AI Agent的五大工具框架!(新手科普篇)
人工智能·后端·程序员