opencv的颜色通道问题 rgb bgr
文章目录
- 🌕原图
- 🌕opencv读取该图片然后显示和保存
- 🌙imshow显示和imwrite保存的结果
- 🌙用plt显示opencv读取的图片
- 🌙原理和结论
- 🌕参考文章
opencv是按bgr格式读取,plt是按rgb格式读取。
🌕原图
现给出一个图片reg.jpg进行测试:
🌕opencv读取该图片然后显示和保存
import cv2
import numpy as np
import matplotlib.pyplot as pltimage_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读取的图片
import cv2
import numpy as np
import matplotlib.pyplot as pltimage_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显示的是不正常的。
🌙原理和结论
原因是:
opencv的imshow和imwrite让我们看到的图像颜色是RGB的,但其实其存储是按BGR来存储的。
opencv遵循的是bmp位图格式,即存储阵列为BGR,通道按BGR排列,imshow和imwrite会将通道自动转为RGB。所以到的imshow和imwrite结果是正常的。
读取前图片状态: r g b
读取后未显示前的图片状态:b g r
imshow显示与imwrite保存后的图片状态:r g b
plt读取的是 读取后未显示前的图片状态 ,此时图片通道顺序是b g r,但是plt不知道,它只把第一个通道当作r通道显示,所以最终显示的颜色颠倒。
🌕参考文章
CV2逐步学习-1.imread()详解+cvtColor()颜色空间转换