Python使用OpenCV与Matplotlib处理图像及灰度转换
本文介绍如何在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灰度图相关技术细节,可参考本站其他文章或持续关注后续更新。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









