opencv的颜色通道顺序为[B,G,R],matplotlib的颜色通道顺序为[R,G,B]

博客介绍了使用Python的OpenCV和Matplotlib库读取图像,指出用Matplotlib显示图像与原图有色差,原因是通道顺序不同,给出调换通道顺序的解决方案。还介绍了图像灰度化算法,针对灰度图显示发绿问题,说明是默认三通道显示所致,给出添加参数的解决办法。
部署运行你感兴趣的模型镜像

python读取图像

原图:

 


import cv2  # 利用opencv读取图像
import numpy as np
# 利用matplotlib显示图像
import matplotlib.pyplot as plt 

img = cv2.imread("./lena.png") #读取图像
# 显示图像
plt.imshow(img)
plt.axis('off')
plt.show()

 


效果:

 

 

 

问:为什么画出的图像和原图有色差呢?
答:opencv的颜色通道顺序为[B,G,R],而matplotlib的颜色通道顺序为[R,G,B]。
解决方案:把R和B的位置调换一下

img = img[:,:,(2,1,0)]


再次显示图像
效果:(自己做了就知道了)

 

图像灰度化算法Gray = 0.299R+0.587G+0.114*B

 

r,g,b = [img[:,:,i] for i in range(3)]
img_gray = r*0.299+g*0.587+b*0.114

再次显示图像

plt.imshow(img_gray)
plt.axis('off')
plt.show()
 

问:为什么她绿了?
答:因为我们还是直接使用plt显示图像,它默认使用三通道显示图像。
解决方案:在plt.imshow()添加参数

plt.imshow(img_gray,cmap="gray")
plt.axis('off')
plt.show()

效果:

å¨è¿éæå¥å¾çæè¿°

您可能感兴趣的与本文相关的镜像

Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

### OpenCV中B通道图像显示颜色异常的原因 在使用OpenCV处理图像读取图像默认是以BGR颜色空间存储的。这意味着图像的三个颜色通道分别是色(Blue)、绿色(Green)和色(Red)的顺序。然而,当使用`cv2.split()`函数分离图像通道后,单独显示某个通道(例如通道,可能会发现图像显示的颜色与预期不符。 #### 单通道显示为灰度图像使用`cv2.split()`函数将彩色图像分离为各个通道,得到的每个通道都是单通道的灰度图像[^1]。例如,分离出的通道(B通道)表示的是图像色成分的强度分布,其值范围从0(黑色)到255(白色)。因此,单独显示通道,并不会呈现出色,而是以灰度的形式显示[^5]。 #### 显示通道的灰度图像 以下是一个示例代码,展示了如何分离图像通道并显示通道的灰度图像: ```python import cv2 import matplotlib.pyplot as plt # 读取图像 image_path = 'path/to/your/image.jpg' image = cv2.imread(image_path) # 分离图像通道 channel_b, channel_g, channel_r = cv2.split(image) # 显示通道的灰度图像 plt.imshow(channel_b, cmap='gray') plt.title('Blue Channel') plt.axis('off') plt.show() ``` 此代码将显示通道的灰度图像,其中较亮的区域表示该区域的色成分较强。 #### 颜色通道的可视化 为了更直观地理解各个颜色通道的作用,可以将每个通道的灰度图像与原始颜色图像进行对比。例如,通道图像显示的是图像色成分的分布,而绿通道图像显示的是绿色成分的分布。这些灰度图像颜色并不直接对应于实际的颜色,而是表示了各个颜色成分的强度[^3]。 #### 颜色通道的重新组合 如果希望恢复原始的彩色图像,可以使用`cv2.merge()`函数将分离的通道重新组合起来: ```python # 重新组合图像通道 merged_image = cv2.merge((channel_b, channel_g, channel_r)) # 显示合并后的图像 cv2.imshow("Merged Image", merged_image) cv2.waitKey(0) cv2.destroyAllWindows() ``` 通过这种方式,可以确保图像颜色通道正确地组合在一起,从而显示出正确的颜色
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值