oneline
350

opencv4官方教程-图片处理【1】

学习目标

  • 这里,你可以学习到如何读取一张图片, 怎么去显示它, 以及如何保存起来。
  • 你会学习这些函数功能 : cv.imread(), cv.imshow() , cv.imwrite()
  • 另外,你也会学习到使用Matplotlib去显示图片

使用opencv

读取一张图片

使用这个功能 cv.imread() 去读取一张图片。 这个图片需要放入到项目文件夹中,或者指定一个完整的图片路径。

第二个参数是指定以哪种方式去读取图片。

提示

你也可以简单的分别传递整形的1,0,或者-1,代替这三个标志。

看下面的代码:

import numpy as np
import cv2 as cv
# Load a color image in grayscale
img = cv.imread('messi5.jpg',0)

警告

即便图片路径是错误的, 它也不会抛出任何错误,但是print img 打印值为None

显示一张图片

使用功能 cv.imshow() 在窗口中显示一张图片。这个窗口自动固定为图片大小。

第一个参数是窗口的名称,它是一个字符串。第二个参数是我们的图片。你可以创建多个窗口,但是需要指定不同的窗口名称。

cv.imshow('image',img)
cv.waitKey(0)
cv.destroyAllWindows

一个窗口的快照,看起来像这样 (Fedora-Gnome电脑):

opencv_screenshot.jpg

图片 cv.waitKey() 是一个键盘绑定功能. 它的参数是毫秒级的时间。这个功能等待任何键盘事件的指定毫秒时间。如果在指定的时间内,按下任何键,程序继续运行。如果传递一个0, 它会无限的等待按键的按下。 它也可以设置为检测特定的按键,例如,如果按下了a键等,我们将在下面讨论。

提示

除了绑定键盘事件之外,此函数还处理许多其他 GUI 事件,因此您必须使用它来实际显示图像。

cv.destroyAllWindows() 简单地销毁我们创建的所有窗口. 如果要销毁任何特定窗口, 使用函数 cv.destroyWindow() 其中,将确切的窗口名称作为参数传递。

提示

在一种特殊情况下,您可以创建一个空窗口,稍后再将图像加载到该窗口中。在这种情况下,您可以指定窗口的大小是否可调整。 这个是通过函数 cv.namedWindow() 完成的. 默认情况下这个标识是 cv.WINDOW_AUTOSIZE. 但是你指定标识为 cv.WINDOW_NORMAL, 你可以调整窗口大小. 当图像尺寸过大以及向窗口添加跟踪栏时,这将很有帮助.

看下面的代码:

cv.namedWindow('image', cv.WINDOW_NORMAL)
cv.imshow('image',img)
cv.waitKey(0)
cv.destroyAllWindows()

写入一张图片

使用功能 cv.imwrite() 保存一张图片.

第一个参数是文件名,第二个参数是要保存的图像。

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

这会将图像以 PNG 格式保存在工作目录中。

总结

下面的程序以灰度加载图像显示它,如果按“s”保存图像并退出,或者如果您按ESC键,则只是退出而不保存。

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

警告

如果您使用的是64位机器,则必须修改k = cv.waitKey(0)行为:k = cv.waitKey(0) & 0xFF

使用 Matplotlib

Matplotlib是Python的绘图库,它为您提供了各种各样的绘图方法。您将在以后的文章中看到它们。在这里,您将学习如何使用Matplotlib显示图像。您可以使用Matplotlib缩放图像,保存它们等。

import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
plt.imshow(img, cmap = 'gray', interpolation = 'bicubic')
plt.xticks(\[\]), plt.yticks(\[\])
plt.show()

窗口的屏幕截图将如下所示 :

matplotlib_screenshot.jpg

另见

Matplotlib 中提供了大量绘图选项。有关更多详细信息,请参阅 Matplotlib 文档。有些,我们将在后续章节中看到。

警告

OpenCV 加载的彩色图像是 BGR 模式。但是Matplotlib以RGB模式显示。因此,如果使用OpenCV读取图像,则彩色图像将无法在Matplotlib中正确显示。有关更多详细信息,请参阅练习。

额外资源

  1. Matplotlib 绘图风格和特征

练习/习题

  1. 当您尝试在OpenCV中加载彩色图像并在Matplotlib中显示它时,会出现一些问题。 查阅 这个讨论 去明白原因.

原英文地址

https://docs.opencv.org/4.1.2/dc/d2e/tutorial_py_image_display.html

opencv 视觉处理 图片处理
发布于: 2022年4月22日