python学opencv|读取图像

【1】引言

前序学习了使用matplotlib模块进行画图,今天开始我们逐步尝试探索使用opencv来处理图片。

【2】学习资源

官网的学习链接如下:

OpenCV: Getting Started with Images

不过读起来是英文版,可能略有难度,所以另推荐一个中文版本的教程,请点击下述链接:

2. GUI 功能 - 图像入门 - 《OpenCV 中文文档 4.0.0》 - 书栈网 · BookStack

作为图像入门的开始教程,英文的官网和中文的博客内容上大同小异,但核心目的都是学会使用三个函数:cv.imread()cv.imshow()cv.imwrite()

细心地同学会发下,imread()和imshow()函数在matplotlib模块中同样可以调用。

【3】 函数解读

【3.1】imread()函数

打开下述链接,可以直达opencv官网对imread()函数的解读:

OpenCV: Image file reading and writing

此处应该理解核心话语:Loads an image from a file.

打开下述链接,可以直达matplotlib官网对imread()函数的解读:

https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.imread.html#matplotlib.pyplot.imread

这里的核心解释几乎完全一样:Read an image from a file into an array.

理解下来:imread()函数的功能是读取(read)图片。

【3.2】imshow()函数

打开下述链接,可以直达opencv官网对imshow()函数的解读:

OpenCV: High-level GUI

此处应该理解核心话语:

此处应该理解核心话语:Displays an image in the specified window.

打开下述链接,可以直达matplotlib官网对imread()函数的解读:

matplotlib.pyplot.imshow --- Matplotlib 3.9.2 documentation

这里的核心解释略有不同,但实际上的效果几乎完全一样:Display data as an image, i.e., on a 2D regular raster.

理解下来:imread()函数的功能是显示(display)图片。

【3.3】imwrite()函数

打开下述链接,可以直达opencv官网对imwrite()函数的解读:

OpenCV: Image file reading and writing

此处应该理解核心话语:

此处应该理解核心话语:Saves an image to a specified file.

在matplotlib官网中没有找到该函数。

理解下来:imread()函数的功能是保存(write)图片。

【4】 代码解读

在上述解读的基础上,我们尝试理解代码。

书栈网2. GUI 功能 - 图像入门 - 《OpenCV 中文文档 4.0.0》 - 书栈网 · BookStack

提供了一段非常简洁清晰的代码,我们对其进行解读。

python 复制代码
    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([]) # 隐藏 X 和 Y 轴的刻度值
    plt.show()

首先是引入画图和opencv模块:

复制代码
import numpy as np #引入计算模块
import cv2 as cv #引入opencv模块
from matplotlib import pyplot as plt #引入画图模块

然后是读取图片和显示图片:

复制代码
img = cv.imread('messi5.jpg', 0) #读取图片
plt.imshow(img, cmap='gray', interpolation='bicubic') #显示图片

读取图片使用了opencv模块,显示图片使用了matplotlib模块。

然后是直接输出图片:

复制代码
plt.xticks([]), plt.yticks([])  # 隐藏 X 和 Y 轴的刻度值
plt.show() #输出图片

不过这段代码不能直接读取和输出图片,因为我们没有messi5.jpg。所以我改了一下,使用了自己的图片。

请注意,如果是使用pycharm编辑器,图片的应该和python程序存在同一个位置,也就是对应的project里面。比如我的程序名为testcv,程序位于D盘的位置是:

D:\python\workspace\pythonProject20\testcv.py

则图片也应该放在这个位置。

以下述图片为例:

++图1++

把图片放在对应位置后,把读取图片的代码改成下述形式:

复制代码
img = cv.imread('2d3d01.png', 0) #读取图片

此时运行代码会获得新图片:

++图2++

【5】代码改写

为了测试图片保存函数cv.imwrite(),我们尝试增加下述代码:

复制代码
cv.imwrite('2d3d01-cv.png', img) #保存图片

运行代码后,我们看到文件夹了果然多了一张图片:

++图3++

可见,imwrite()函数成功保存了图片。

【6】总结

开启了入门学习opencv的新篇章,学习了三个函数:cv.imread()cv.imshow()cv.imwrite()

的基本功能。

相关推荐
木子算法几秒前
不是重心也不是中点:费马—韦伯点、它的最优性条件与迭代求解
人工智能·算法·目标跟踪
正经教主2 分钟前
【FDE系列】阶段2:Day 43:Docker Compose — 多容器一键编排
人工智能·docker·fde
YOLO数据集集合3 分钟前
天空红外小目标检测数据集 | 红外小目标 天空目标检测 无人机检测 鸟类识别 低空安防9099期
人工智能·目标检测·计算机视觉·目标跟踪·无人机·无人机视角·直升机检测
徐健峰5 分钟前
Windows 安装 Codex CLI 教程:npm 安装、首次登录与常见报错排查【无图精华版】
人工智能·gpt
微三云 - 廖会灵 (私域系统开发)8 分钟前
企业大模型应用工程化思考:跳出 Demo 陷阱,构建「业务‑资产‑Agent」三层落地架构
人工智能·矩阵·重构
IamZJT_9 分钟前
03| 新消息来了:让 Demo 会追问、等待和继续调查
人工智能
邪修king10 分钟前
Re:Linux 系统篇(三十四):进程间通信开篇Chapter1 —— 匿名管道 pipe 深度拆解与代码实战
android·linux·运维·开发语言
Ai-_Man10 分钟前
您您这可以把Mistral AI的多个会话比如说。左侧的多个会话一次性导出吗?不是单条会话里面的多次会对话。
人工智能·ai·小程序·电脑