0
点赞
收藏
分享

微信扫一扫

【OpenCV教程】02 图像的读取与显示


导读

OpenCV功能越发强大,不学一下怎么行?


今天要分享这篇文章带我们一起了解图像的最基本操作:读取和显示 。让我们走进这篇文章,一起来了解一下吧!


如果你有什么问题,或者有什么想法,欢迎评论与我一起沟通交流。如果你想了解更多有关于计算机视觉、OpenCV、机器学习、深度学习等相关技术的内容,想与更多大佬一起沟通,那就加群:326866692 或者扫描下方二维码加入我们吧!


图像的最基本操作

图像操作有很多,如果你有了解过图像处理或者计算机视觉,你会接触到各种各样的图像处理方式,比如调整亮度,比如获取图像轮廓,比如转换颜色空间等等。


当然,我们在这里不展开说,但是不管是什么样的图像处理,一般来说,我们都需要先加载图像,也就是需要计算机读取图像信息,才能对其进行更多的操作。操作完成之后,我们需要显示图像,让我们能够直观的感受到图像操作之后的效果,也方便调试代码的时候,看我们的处理是否达到我们的目标。


也就是说,不管什么OpenCV项目,我们都至少需要下面两个操作:


读取图像(加载图像):将照片读取,方便后续操作。

显示图像:将读取的图像展示或者将处理后的图像展示,方便我们查看处理效果,验证处理是否符合我们的预期。


因为是基本每个项目都会出现,甚至我们之后的每个教程都会用到,所以我们把它们称之为:图像的最基本操作

1 绕不开的API

在讲正式内容之前,让我们先来聊聊API。


首先我们先来看一下API的定义:


【定义】


API(全称为:Application Programming Interface , 应用程序接口)是一些预先定义的函数,或指软件系统不同组成部分衔接的约定。目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问原码,或理解内部工作机制的细节。


定义永远都是专业的、拗口的,不适合初学者理解的。不然,也就不需要这么多教程来进行学习。定义是为了标准化规范化,对于初学者来说,理解起来比较困难。


举个简单的例子,你有一部手机,你知道手机可以安装软件,如果只是简单的使用,而不是做手机软件开发,你只需要点击按钮安装即可,不需要知道它为什么可以安装,怎么实现的安装过程。你下载了某个软件,你知道这个软件有哪些操作,能实现哪些功能,我们怎么使用就可以了,不用去管他是怎么开发出来的。


API,绕不开的API,我们只需要知道:

1.这个API是做什么的,功能是什么?

2.这个API需要用到哪些参数,参数格式、类型、取值范围是什么?

3.这个API会返回什么?


就像python里面的各种包。我们不是专门的python开发人员,我们只需要知道:

1.我们用到的包都有哪些我们常用的函数?

2.这些函数的功能是什么?

3.这些函数的参数是什么?

4.这些函数的返回值是什么?


我们后面讲到的每一个理论,基本都会对应一个或多个API,从后续的学习中,我想大家对API应该能够更加深刻的认知。

1 读取图像

1 理论讲解

前面我们讲到,图像有两个最基本操作,其中一个就是读取图像。


读取图像又叫加载图像,一般是指读取某张图像的信息,加载到存储图像的数据结构中,方便我们后续对图像进行深入操作。

2 API介绍

读取图像的API是imread,该API实现的功能是:


从指定文件加载图像并返回它。如果无法读取图像(因为缺少文件、权限不正确、不受支持或格式无效),则函数将返回空矩阵。


API定义如下:


def imread(filename, flags=None)


API的参数含义如下:


(1)filename:要加载的图像的文件名,可以包括路径。
(2)flags:加载图像的方式,默认是None,也就是原图展示。


对于第二个参数,它可取值如下:


IMREAD_UNCHANGED = -1
IMREAD_GRAYSCALE = 0
IMREAD_COLOR = 1
IMREAD_ANYDEPTH = 2
IMREAD_ANYCOLOR = 4


IMREAD_LOAD_GDAL = 8


IMREAD_REDUCED_COLOR_2 = 17
IMREAD_REDUCED_COLOR_4 = 33
IMREAD_REDUCED_COLOR_8 = 65


IMREAD_REDUCED_GRAYSCALE_2 = 16
IMREAD_REDUCED_GRAYSCALE_4 = 32
IMREAD_REDUCED_GRAYSCALE_8 = 64


IMREAD_IGNORE_ORIENTATION = 128


最常用的取值及含义如下:


(1)IMREAD_UNCHANGED:按原样返回加载的图像,一般可以不用写
(2)IMREAD_GRAYSCALE:将图像转换为单通道灰度图像输出
(3)IMREAD_COLOR:将图像转换为3通道BGR彩色图像
(4)IMREAD_REDUCED_GRAYSCALE_2:图像转换为单通道灰度图像,图像大小减小1/2
(5)IMREAD_REDUCED_GRAYSCALE_4:将图像转换为单通道灰度图像,图像大小减小1/4
(6)IMREAD_REDUCED_COLOR_2:将图像转换为3通道BGR彩色图像,图像大小减小1/2
(7)IMREAD_REDUCED_COLOR_4:图像转换为3通道BGR彩色图像,图像大小减小1/4


我们可以用前面的符号表示,也可以用后面的数字表示。



3 代码示例

讲完理论和API,我们举几个例子。


img = cv.imread('./image/sign.png') # 默认方式
img = cv.imread('./image/sign.png', -1) # 数字形式
img = cv.imread('./image/sign.png', cv.IMREAD_UNCHANGED) # 符号形式



2 显示图像

1 理论讲解

另一个图像最基本的操作就是显示图像。


显示图像又叫加载图像,就是将图像显示出来,让我们直观的看到它,可以是看加载的图像,可以是看生成的图像。


显示图像和输出不同,输出是输出图像的信息,显示图像是将图像以图像形式显示出来。


注意:

这里有一点要注意的是,我们显示图像的时候,必须要在显示图像的后面添加下面函数


这个函数的含义是:将无限显示窗口,直到任何一个键按下为止。如果没有这条语句,将不会显示图像。


函数里面的数值是可以变化的。除了0之外,还有一个常用的是25,单位是毫秒。表示的是视频的一帧,如果你显示的是视频,就会逐帧显示视频。


2 API介绍

读取图像的API是imshow,该API实现的功能是:


在指定的窗口显示图像,一般都是原大小显示。


API定义如下:


def imshow(winname, mat)


API的参数含义如下:


(1)winname,图像展示的窗口名称。
(2)mat,要展示的图像。


3 代码示例

我们将上面读取到的图片显示一下。


cv.imshow("show img", img)
cv.waitKey(0)


执行结果如下:


【OpenCV教程】02 图像的读取与显示_读取图像


如果我们没有使用 waitKey(0) ,就会产生下面的状况:


【OpenCV教程】02 图像的读取与显示_读取图像_02


4 使用 matplotlib 显示图像

除了OpenCV作为专业的计算机视觉库可以显示图像外,matplotlib模块也能显示图像,代码如下:


import cv2 as cv
from matplotlib import pyplot as plt


img = cv.imread('./image/sign.png') #默认方式
plt.imshow(img)
plt.xticks([]), plt.yticks([]) # 隐藏x和y的坐标值
plt.show()


执行结果如下:


【OpenCV教程】02 图像的读取与显示_加载_03


说在后面的话

这篇文章到这里就要结束啦,希望大家能够通过这篇文章,能够掌握图像的读取及显示功能,让我们在后续的课程中,再接再厉,学习更多知识吧。



【OpenCV教程】02 图像的读取与显示_显示图像_04




举报

相关推荐

0 条评论