Bootstrap

Python-计算机视觉-OpenCV-Image

学习目标

将学习如何读取图像、如何显示图像以及如何保存图像。

学习这些函数: cv2.imread () ,cv2.imshow () ,cv2.imwrite ()。

学习如何使用 Matplotlib 显示图像。

Read an image 读取图像

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

使用函数 cv2.imread ()读取图像。 图像应该在工作目录或图像的完整路径应给出。

第二个参数是一个标志,它指定了读取图像的方式。

  • cv2.IMREAD_COLOR :加载彩色图像。 任何图像的透明度都会被忽视。 它是默认标志

  • cv2.IMREAD_GRAYSCALE:以灰度模式加载图像

  • cv2.IMREAD_UNCHANGED:加载包括 alpha 通道在内的图像

注意:

除了这三个标志,您还可以简单地分别传递整数1、0或 -1。

即使图像路径是错误的,它也不会抛出任何错误,但是 print img 会给出 None

Display an image 显示图像

用函数 cv2.imshow ()在窗口中显示图像。 该窗口自动适合图像的大小。

img = cv2.imread('11.jpg',cv2.IMREAD_COLOR)
cv2.namedWindow('image', cv2.WINDOW_NORMAL)
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

aitkey ()是一个键盘绑定函数。 其参数是以毫秒为单位的时间。 该函数等待任何键盘事件指定的毫秒。 如果您在这段时间内按下任何键,程序将继续运行。 如果0被传递,它将无限期地等待一次敲击键。 它也可以设置为检测特定的按键,例如,如果按下键 a 等,我们将在下面讨论。

Destroyallwindows ()只会破坏我们创建的所有窗口。 如果您想要销毁任何特定的窗口,可以使用函数 cv2.destroyWindow () ,在该函数中将确切的窗口名称作为参数传递。

注意:

在特殊情况下,您可以先创建一个窗口,然后再将图像加载到该窗口。 在这种情况下,您可以指定窗口是否可以调整大小。 它是通过函数 cv2.namedWindow ()实现的。 默认情况下,标志是 cv2.WINDOW AUTOSIZE。 但是如果您将标志指定为 cv2.WINDOW NORMAL,则可以调整窗口的大小。 当图像尺寸太大时,在窗口添加跟踪条会很有帮助。

读取图片如下截图

Write an image 写一张图

使用函数 cv2.imwrite ()保存映像。

img = cv2.imread('11.jpg',cv2.IMREAD_COLOR)
cv2.imwrite('messigray.png',img)

第一个参数是文件名,第二个参数是要保存的图像。这将以 PNG 格式保存图像到工作目录中。

Sum it up 总结一下

下面的程序加载一个图像的灰度,显示它,保存图像,如果你按's'和退出,或只是退出没有保存,如果你按 ESC 键。

import numpy as np
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()

注意:

如果您使用的是64位机器,则必须修改如下 kcv2.waitkey (0)行: kcv2.waitkey (0) & 0xFF

拓展-使用 Matplotlib

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

若没下载,请执行

pip install matplotlib

使用

import numpy as np
import cv2
from matplotlib import pyplot as plt
 
img = cv2.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()

运行上面代码,如下:

注意:

Matplotlib 有很多可供选择的绘图方法。 更多细节请参考 Matplotlib 文档。 一些,我们会在路上看到。

Opencv 加载的彩色图像处于 BGR 模式。 但是 Matplotlib 显示为 RGB 模式。 因此,在 Matplotlib,如果使用 OpenCV 读取图像,彩色图像将无法正确显示。 详情请参阅练习。