点赞 + 关注 + 收藏 = 学会了
对于刚接触 opencv 的工友来说,能快速看到图像处理的效果是很重要的。OpenCV 内置了图像预览方法,我在之前的文章里已经介绍过。
而在 Python 生态里,有一个更厉害的图像显示工具 ------ Matplotlib
-
OpenCV:这是一个专门用于图像处理和计算机视觉的开源库,它能方便地读取、处理各种图像。
-
Matplotlib:这是 Python 的一个绘图库,其中的 pyplot 模块可以像 MATLAB 一样创建各种类型的图表,包括显示图像,而且显示效果直观,还能在图像上做一些简单标注等。
用 OpenCV 读取图像后,再用 Matplotlib 显示,既能利用 OpenCV 的读取优势,又能借助 Matplotlib 的显示优势。
上手操作
安装相关库
如果还没有安装这两个库,需要先进行安装。打开命令提示符(Windows)或终端(Mac/Linux),输入以下命令:
pip install opencv-python
pip install matplotlib
导入库
在 Python 代码中,首先要导入需要用到的库:
python
import cv2 # 导入OpenCV库,通常简写为cv2
import matplotlib.pyplot as plt # 导入Matplotlib的pyplot模块,通常简写为plt
读取图像
用 OpenCV 的imread函数读取图像。需要注意的是,要正确填写图像的路径,如果图像和代码文件在同一个文件夹里,直接写图像文件名即可;如果不在,要写完整的路径。
python
# 读取图像,参数为图像路径
img = cv2.imread('图片路径')
要是读取失败,可能是路径写错了,或者图像文件损坏了,可以检查一下这两个方面。
图像颜色通道转换
**OpenCV 读取图像时,默认的颜色通道是 BGR(蓝、绿、红),而 Matplotlib 显示图像时默认的是 RGB(红、绿、蓝)。**如果不进行转换,显示的图像颜色会不正常(比如红色和蓝色会颠倒)。所以需要进行通道转换,用 OpenCV 的cvtColor函数:
python
# 将BGR格式转换为RGB格式
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
用 Matplotlib 显示图像
做好前面的准备后,就可以用 Matplotlib 显示图像了:
python
# 创建一个图像窗口
plt.figure()
# 显示图像,参数为要显示的图像
plt.imshow(img_rgb)
# 隐藏坐标轴,让图像显示更整洁
plt.axis('off')
# 显示图像
plt.show()
完整的代码及展示效果
我在项目里创建了一个 images
目录,把 雷猴.jpeg
图片放在里面。

python
import cv2 # 导入OpenCV库,通常简写为cv2
import matplotlib.pyplot as plt # 导入Matplotlib的pyplot模块,通常简写为plt
# 读取图像,参数为图像路径
img = cv2.imread('./images/雷猴.jpeg')
# 将BGR格式转换为RGB格式
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 创建一个图像窗口
plt.figure()
# 显示图像,参数为要显示的图像
plt.imshow(img_rgb)
# 隐藏坐标轴,让图像显示更整洁
plt.axis('off')
# 显示图像
plt.show()
关键方法讲解
plt.figure
使用 plt.figure()
创建了一个图像窗口。
plt.figure
的语法:
python
plt.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True)
-
num:图像窗口的标识,可以是整数或字符串。如果未指定,会自动递增生成;若指定相同的值,会复用已有的窗口。
-
figsize:以元组形式指定窗口的大小,格式为(宽, 高),单位是英寸。例如figsize=(8, 6)表示窗口宽 8 英寸,高 6 英寸。
-
dpi:指定图像的分辨率,即每英寸的像素数,数值越大图像越清晰。
-
facecolor:窗口的背景颜色,默认是白色。
-
edgecolor:窗口边缘的颜色。
-
frameon:布尔值,是否显示窗口的边框,默认为True(显示)。
plt.imshow
plt.imshow()
的作用是将图像数据加载到创建的图像窗口中,是显示图像的核心步骤。
python
plt.imshow(X, cmap=None, aspect=None, interpolation=None)
-
X:要显示的图像数据,可以是数组形式。对于彩色图像,通常是三维数组(高度, 宽度, 通道数);对于灰度图像,是二维数组(高度, 宽度)。
-
cmap:指定颜色映射表,用于灰度图像或单通道图像的颜色显示。默认是viridis,显示彩色时一般不用设置,显示灰度图时需设置为'gray'。
-
aspect:控制图像的宽高比,'auto'表示自动调整以适应窗口,'equal'表示保持图像原始的宽高比。
-
interpolation:指定图像缩放时的插值方法,如'nearest'(最近邻插值)、'bilinear'(双线性插值)等,影响图像缩放后的平滑程度。
plt.axis
plt.axis()
可以控制坐标轴的显示状态或范围,在显示图像时设置为'off'可以让图像显示更简洁。
如果上面代码把 plt.axis('off')
这句注销掉的话,展示的图像左侧及下方都会显示坐标轴。

plt.axis
的语法如下:
python
plt.axis(arg)
- arg可以是'on'(显示坐标轴)、'off'(隐藏坐标轴),也可以是一个列表[xmin, xmax, ymin, ymax],用于指定坐标轴的范围。
plt.show
plt.show()
显示所有创建的图像窗口,将之前通过plt.imshow等方法加载的图像内容呈现出来。在脚本中,必须调用该方法才能看到图像;在交互式环境(如 Jupyter Notebook)中,有时会自动显示,但显式调用更稳妥。
进阶玩法
显示灰度图像
如果想显示灰度图像,步骤略有不同。OpenCV 读取灰度图像时,可以在imread函数中添加参数cv2.IMREAD_GRAYSCALE,此时读取的图像是单通道的,不需要进行颜色通道转换。
只需在上一个例子里该一句代码
python
# 读取图像,参数为图像路径
img = cv2.imread('./images/雷猴.jpeg', cv2.IMREAD_GRAYSCALE)

多图对比显示
在处理图像时,经常需要对比原图和处理后的图像,Matplotlib 的subplot函数可以实现多图在同一窗口显示。

python
import cv2 # 导入OpenCV库,通常简写为cv2
import matplotlib.pyplot as plt # 导入Matplotlib的pyplot模块,通常简写为plt
# 读取图像,参数为图像路径
img = cv2.imread('./images/雷猴.jpeg')
# 将BGR格式转换为RGB格式
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 将原图转为灰度图
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 创建一个2行1列的子图布局
plt.subplot(2, 1, 1) # 第1行第1列的子图
plt.imshow(img_rgb)
plt.title('origin') # 给子图添加标题
plt.axis('off')
plt.subplot(2, 1, 2) # 第2行第1列的子图
plt.imshow(gray_img, cmap='gray')
plt.title('gray')
plt.axis('off')
# 调整子图之间的间距
plt.show()
关键方法讲解
plt.subplot
plt.subplot()
的作用是在一个图像窗口中创建多个子图,实现多幅图像的对比显示。例如plt.subplot(2, 1, 1)表示创建一个 2 行 1 列的子图布局,当前操作第 1 个子图。
语法:
python
plt.subplot(nrows, ncols, index)
-
nrows:子图的行数。
-
ncols:子图的列数。
-
index:当前子图的索引,从 1 开始,按行优先顺序排列。
以上就是本文的全部内容啦,想了解更多 OpenCV 的玩法,欢迎关注 《OpenCV-Python 中文教程》
也可以➕我 green bubble 吹吹水咯

点赞 + 关注 + 收藏 = 学会了