1.3保存图像

使用函数 cv2.imwrite() 来保存一个图像。首先需要一个文件名,之后才是你要保存的图像。

cv2.imwrite('messigray.png',img)


总结:

下面的程序将会加载一个灰度图,显示图片,按下’s’键保存后退出,或者 按下 ESC 键退出不保存。

import cv2
 
img = cv2.imread('messi5.jpg', 0)
cv2.imshow('image', img)
k = cv2.waitKey(0)
if k == 27:  # wait for ESC key to exit
    cv2.destroyAllWindows()
elif k == ord('s'):  # wait for 's' key to save and exit
    cv2.imwrite('messigray.png', img)
    cv2.destroyAllWindows()

警告:如果是Windows64 位系统,需将  k  =  cv2.waitKey(0) 这行改成k  =  cv2.waitKey(0)&0xFF

1.4使用 Matplotlib

Matplotib 是 python 的一个绘图库,里头有各种各样的绘图方法。之后 会陆续了解到。现在,你可以学习怎样用 Matplotib 显示图像。你可以放大,保存图像等等。

import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread('messi5.jpg',0)
plt.imshow(img, cmap = 'gray', interpolation = 'bicubic')
plt.xticks([]), plt.yticks([])  # to hide tick values on X and Y axis
plt.show()

 窗口截屏如下:

参见:Matplotib  有多种绘图选择。具体可以参见 Matplotib  docs。我们也会陆续了解一些

注意:彩色图像使用 OpenCV 加载时是 BGR 模式。但是 Matplotib 是 RGB 模式。所以彩色图像如果已经被 OpenCV 读取,那它将不会被 Matplotib 正 确显示。具体细节请看练习

更多资源Matplotlib Plotting Styles and Features

当你用 OpenCV 加载一个彩色图像,并用 Matplotib 显示它时会遇 到一些困难。请阅读this discussion并且尝试理解它。

  1. 灰度图像:由于图像是以灰度模式读取的,img 是一个二维数组。如果是彩色图像,img 将是一个三维数组(包含 RGB 三个通道)。

  2. Matplotlib 显示Matplotlib 默认使用 RGB 格式显示图像,而 OpenCV 使用 BGR 格式。如果读取的是彩色图像,需要先转换颜色空间:

    img = cv.cvtColor(img, cv.COLOR_BGR2RGB)

出现:Import "matplotlib"could not be resolved from source 

解决:

在虚拟环境中直接升级 pip

  1. 激活虚拟环境

    • 打开终端(命令行)。

    • 运行以下命令激活虚拟环境:

      f:\opencv-python\myenv1\Scripts\activate

      激活后,命令提示符前会显示虚拟环境名称(如 (myenv1))。

  2. 升级 pip

    • 运行以下命令升级 pip

      python -m pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple
      
    • 确保升级的是虚拟环境中的 pip

      • 在升级前,务必确认虚拟环境已激活,或者使用虚拟环境中的 Python 解释器。

      • 你可以通过以下命令检查当前 pip 的位置:

        pip --version

        确认路径是否包含 myenv1

    • 升级后验证

      • 升级完成后,运行 pip --version 确认版本是否更新。

      • 安装matplotlib pip install matplotlib -i https://mirrors.aliyun.com/pypi/simple/

这段代码用于读取一张灰度图像并显示它,使用了 OpenCV 和 Matplotlib 库。以下是每一句代码的详细解释:


1. import numpy as np

  • 作用:导入 NumPy 库,并将其命名为 np

  • 说明NumPy 是 Python 中用于科学计算的核心库,常用于处理数组和矩阵运算。虽然这段代码中没有直接使用 NumPy,但 OpenCV 和 Matplotlib 通常依赖于它。


2. import cv2 as cv

  • 作用:导入 OpenCV 库,并将其命名为 cv

  • 说明OpenCV 是一个开源的计算机视觉库,提供了丰富的图像处理功能。这里使用它来读取图像。


3. from matplotlib import pyplot as plt

  • 作用:从 Matplotlib 库中导入 pyplot 模块,并将其命名为 plt

  • 说明Matplotlib 是 Python 中用于绘制图表和图像的库,pyplot 是其常用的绘图模块。


4. img = cv.imread('messi5.jpg', 0)

  • 作用:使用 OpenCV 读取图像文件 'messi5.jpg',并将其转换为灰度图像。

  • 参数

    • 'messi5.jpg':图像文件的路径。

    • 0:表示以灰度模式读取图像(如果是 1,则表示以彩色模式读取)。

  • 返回值img 是一个二维数组(灰度图像)或三维数组(彩色图像),表示图像的像素值。


5. plt.imshow(img, cmap='gray', interpolation='bicubic')

  • 作用:使用 Matplotlib 显示图像。

  • 参数

    • img:要显示的图像数据(这里是灰度图像)。

    • cmap='gray':指定颜色映射为灰度(如果是彩色图像,可以省略此参数)。

    • interpolation='bicubic':指定图像插值方法为双三次插值,使图像显示更平滑。

  • 说明plt.imshow() 用于显示图像,但此时图像还不会显示出来,需要调用 plt.show()


6. plt.xticks([]), plt.yticks([])

  • 作用:隐藏 X 轴和 Y 轴的刻度值。

  • 说明

    • plt.xticks([]):隐藏 X 轴的刻度。

    • plt.yticks([]):隐藏 Y 轴的刻度。

  • 目的:使图像显示更简洁,避免刻度值干扰视觉效果。

  • 如果你不希望隐藏 X 轴和 Y 轴的刻度值,可以直接删除或注释掉这一行


7. plt.show()

  • 作用:显示图像。

  • 说明plt.show() 是 Matplotlib 中用于显示所有已绘制内容的函数。在此之前的所有绘图操作(如 plt.imshow())都不会直接显示图像,直到调用 plt.show()

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐