如何利用OpenCV读取,显示以及写入图片?

网友投稿 929 2022-05-28

简 介:

本文中,你了解了: imread(), imshow()以及imwrite()等函数用于图像的读取、显示和保存; waitKey(), destroyAllWindows()函数用于:对于waitKey()函数建议你多做些实验,因为它的某些特性比较容易让人搞混淆。 你对它越熟悉,你就能够更好的掌握它。对于文中的代码你可以拷贝粘贴下来进行实验。

关键词:

OpenCV,Image,imread,imwrite

前 言

目 录

如何利用OpenCV读取,显示以及写入图片?

Contents

读取图像

显示图像

图像写入

总 结

前 言

目 录

Contents

读取图像

显示图像

图像写入

总 结

本文来自于Read, Display and Write an Image using OpenCV ,对于应用OpenCV完成图片的读取、显示和写入。

对于图片读取、显示和写入文件是图像处理和计算机视觉最基本的操作过程。甚至在对于图片进行截取、缩放、旋转以及利用各种滤波器进行处理,你所要做的第一件事情就是从文件中将图片读取到计算机内存。所以掌握这项基本的操作非常重要。

OpenCV,作为世界上最大的计算机视觉库,利用内置的三个函数来完成这些操作。它们分别是:

1. imread() 读取图像;

2. imshow() 显示图像;

3. imwrite() 将图像写入文件;

下面是本文所使用的样例图片。

首先,下面的代码读取上述文件,并进行显示。查看代码是如何包含上述三条函数的。继续往下处理我们将对应用在代码中的每个函数进行讨论。

# import the cv2 library import cv2 # The function cv2.imread() is used to read an image. img_grayscale = cv2.imread('test.jpg',0) # The function cv2.imshow() is used to display an image in a window. cv2.imshow('graycsale image',img_grayscale) # waitKey() waits for a key press to close the window and 0 specifies indefinite loop cv2.waitKey(0) # cv2.destroyAllWindows() simply destroys all the windows we created. cv2.destroyAllWindows() # The function cv2.imwrite() is used to write an image. cv2.imwrite('grayscale.jpg',img_grayscale)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

取图片,应用OpenCV中的imread()函数。下面函数调用语法:

imread(filename, flags)

1

它需要了两个参数:

1. 第一个参数为图像文件名称,需要文件的全路径名称。

2. 第二个参数说明图片如何表示。OpenCV提供了几个对于图片数据表示的方式,下面三个是最常用的:

* cv2.IMREAD_UNCHANGED or -1

* cv2.IMREAD_GRAYSCALE or 0

* cv2.IMREAD_COLOR or 1

函数缺省的flags的参数为1,也就是将读取的图片表示成彩色图像。你可以使用不同的flags参数来将读取的图片数据表示成特殊的格式。下面我们测试一下不同的 flags选项所产生的效果。

在这里需要强调一下,OpenCV表示彩色图片使用的为BGR格式,而大多数其他计算机视觉库则使用的RGB格式表示。所以在使用OpenCV配合替他工具包使用的时候,不要忘记将蓝色与红色通道进行交换,这样才能够切换到其它图像处理库。

下面的代码中,我们首先读取了测试图像,测试上面三种flags选项E对应的情况。

# Read an image img_color = cv2.imread('test.jpg',cv2.IMREAD_COLOR) img_grayscale = cv2.imread('test.jpg',cv2.IMREAD_GRAYSCALE) img_unchanged = cv2.imread('test.jpg',cv2.IMREAD_UNCHANGED)

1

2

3

4

或者

img_color = cv2.imread('test.jpg',1) img_grayscale = cv2.imread('test.jpg',0) img_unchanged = cv2.imread('test.jpg',-1)

1

2

3

OpenCV中,使用imshow()函数来显示图像。调用语法为:

imshow(window_name, image)

1

这个函数也需要两个参数:

1. 第一个参数是显示图片窗口的名称;

2. 第二个参数就是需要显示的图片数据;

如果显示多个图片,你需要为每个图片显示的窗口指定新的窗口名称。

函数 imshow()通常与 waitKey()、distroyAllWindow()/distroyWindow() 函数联合使用。

函数 waitKey() 用于绑定键盘:

它带有一个数字参数,指明窗口显示的时间(单位ms);

在等待时间内,用户输入任何字符,程序将会立即往下进行;

如果等待参数为0,程序将会无限期等待用户的输入字符;

你也可以设定该函数检测特殊的按键操作,比如Q键,或者 ESC键。然后显示每个案件特殊的行为;

函数 distroyAllWindows() 将所有显示图片所创建的窗口关闭。如果想关闭某个窗口,则需要将该窗口的名称指定。使用 distroyAllWindows() 也将窗口和图片从计算机内存清除。下面的代码演示了函数 imshow()的是如何被用于显示你读入的图片的。

#Displays image inside a window cv2.imshow('color image',img_color) cv2.imshow('grayscale image',img_grayscale) cv2.imshow('unchanged image',img_unchanged) # Waits for a keystroke cv2.waitKey(0) # Destroys all the windows created cv2.destroyAllwindows()

1

2

3

4

5

6

7

8

9

10

下面动图显示了整个对于图片的读入、显示、关闭显示窗口的整个过程。

在下面三个输出屏幕中,你可以看到:

1. 第一个图片显示为彩色;

2. 接下来是灰度图片;

3. 第三个是图片的原始格式,在读取的时候使用参数: cv2.IMREAD_UNCHANGED

下面的动图显示了在读取、显示图片过程中没有应用waitKey()函数。用于图片显示的窗口在几个毫秒内就关闭了,所以在屏幕上并没有留下图片窗口。

后,我们来讨论一下如何把一个图像写入、保存在文件目录中。所使用的函数为 imwrite(),它的语法为:

imwrite(filename, image)

1

1. 第一个参数为文件名称,这个文件名称必须包含文件的扩展名,比如 .png,.jpg 等等。OpenCV就是根据文件名称的扩展名来确定保存文件的格式的。

2. 第二个参数就是你所要保存的图像数据。 如果图片成功保存在目录中的文件,函数返回True。

下面的代码显示了保存的过程,这个存盘的过程是很简单的。只是将带有正确扩展名称的文件名输入正确(带有想要保存路径名称),并且将图像数据变量输入,你就完成了图片的存储。

cv2.imwrite('grayscale.jpg',img_grayscale)

1

文中,你了解了:

imread(), imshow()以及imwrite()等函数用于图像的读取、显示和保存;

waitKey(), destroyAllWindows()函数用于:

在键盘操作之后关闭显示图像的窗口;

将图像数据和窗口从内存清除。

对于waitKey()函数建议你多做些实验,因为它的某些特性比较容易让人搞混淆。 你对它越熟悉,你就能够更好的掌握它。对于文中的代码你可以拷贝粘贴下来进行实验。

■ 相关文献链接:

Read, Display and Write an Image using OpenCV

● 相关图表链接:

图1.1 本文所使用的样例图片

图2.1 读入、显示、关闭图片窗口

图2.2 使用imshow()显示图片

图2.3 使用imshow()显示的灰度图片

图2.4 读取图片是使用的参数 cv2.IMREAD_UNCHANGED

图2.5 在显示图片的过程中没有应用waitKey() 函数

OpenCV

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:linux第一课:基础概念
下一篇:vim的简单介绍与使用
相关文章