Python使用OpenCV与Matplotlib处理图像及灰度转换

阿澈
阿澈
发布时间:2026-10-14 | 5人浏览过
原创

本文介绍如何在Python中利用OpenCV读取图像并通过Matplotlib显示。重点解析OpenCV的BGR通道与Matplotlib RGB通道的差异导致的色差问题,并提供调换通道顺序的解决方案。同时讲解基于加权公式的图像灰度化算法及正确显示灰度图的方法,确保输出结果符合预期。

Python图像读取与显示基础

在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与Matplotlib色彩通道差异

问题在于,生成的图像与原图存在明显的色差。这是因为OpenCV在读取图像时默认采用[B, G, R]颜色通道顺序,而Matplotlib在显示图像时默认期望[R, G, B]顺序。要解决这一问题,需要手动调整R和B通道的位置。


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

对图像进行通道调整后,再次进行显示。

图像灰度化算法实现与显示

实现图像灰度化的核心算法公式为:Gray = 0.299*R + 0.587*G + 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()


此时发现图像呈现绿色异常。原因在于Matplotlib默认将输入数据视为三通道彩色图像进行渲染。解决方法是在调用plt.imshow()函数时,显式指定颜色映射参数。


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

修正后的显示效果如下:

至此,完成了Python读取图像、解决色差问题以及实现灰度图显示的完整流程。如需了解更多Python灰度图相关技术细节,可参考本站其他文章或持续关注后续更新。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表