0x01 OpenCV-Python 图片入门

一颗蔬菜 2019-07-15 PM 291℃ 0条

学习目标

  • 学习读取图片,如何让显示图片以及如何保存图片
  • 你将学会三个函数:cv2.imread(), cv2.imshow() , cv2.imwrite()
  • 或者,您将学习如何使用Matplotlib显示图像

使用OpenCV

读取一张图片

使用cv2.imread()读取一张图片。这张图片需要放在你的工作目录下,或者你给出图片的完整绝对路径。

第二个参数是一个flag,指定读取图像的方式。

cv2.IMREAD_COLOR:加载彩色图像。任何图像的透明度都将被忽略。这是默认标志。
cv2.IMREAD_GRAYSCALE:以灰度模式加载图像
cv2.IMREAD_UNCHANGED:加载图像,包括alpha通道

注意:您可以简单地分别传递整数1,0或-1,来代表这三个参数。

代码示例:

import numpy as np
import cv2

# 用灰度模式加载图片
img = cv2.imread('messi5.jpg',0)

警告:如果你给出的图片路径有误,它将不会抛出任何错误,打印出来的图片是None。

展示一张图片

使用cv2.imshow() 函数在窗口中展示一张图片。窗口将自动的适应图片的尺寸。

第一个参数是窗口的名字,参数类型为String。第二个参数是图片的引用。你可以创造任意多个名字不同的窗口。

代码示例:

cv2.imshow('image',img)
# 按任意键关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

该窗口的屏幕截图将如下所示(在Fedora-Gnome机器中):

opencv_screenshot.jpg

cv2.waitKey()是一个键盘绑定函数。它的参数是以毫秒为单位的时间。该函数等待任何键盘事件的指定毫秒。如果您在该时间内按任意键,程序将继续。如果为0,则无限期等待键击。它也可以设置为检测特定的键击,如果按下键a等,我们将在下面讨论。

cv2.destroyAllWindows()用于销毁了我们创建的所有窗口。如果要销毁任何特定窗口,请使用函数cv2.destroyWindow(),并使用需要销毁的窗口名称作为参数。

注意:有一种特殊情况,您可以在以后创建窗口并将图像加载到该窗口。在这种情况下,您可以指定窗口是否可调整大小。它是通过函数cv2.namedWindow()完成的。默认情况下,flag为cv2.WINDOW_AUTOSIZE。但是如果将flag指定为cv2.WINDOW_NORMAL,则可以调整窗口大小。当图像尺寸过大并向窗口添加轨迹栏时,它会很有用。

代码示例:

cv2.namedWindow('image', cv2.WINDOW_NORMAL)
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
写一张图片

使用cv2.imwrite()函数可以保存一张图片。

第一个参数是图片的名字,第二个参数是你想要保存的图片。

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

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

总结

下面的程序将加载灰度图像,显示图像,如果按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:         # 等待 ESC 键退出
    cv2.destroyAllWindows()
elif k == ord('s'): # 等待's' 键保存并退出
    cv2.imwrite('messigray.png',img)
    cv2.destroyAllWindows()

警告:如果你正在使用64位的机器,你必须将k = cv2.waitKey(0)改为k = cv2.waitKey(0) & 0xFF

使用Matplotlib

Matplotlib是Python的绘图库,为您提供各种绘图方法。您将在即将发表的文章中看到它们。在这里,您将学习如何使用Matplotlib显示图像。您可以使用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_screenshot.jpg

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

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

其他的资源

  1. Matplotlib绘制样式和功能

练习

当您尝试在OpenCV中加载彩色图像并在Matplotlib中显示它时,会出现问题。阅读此讨论并理解它。

代码

https://paste.ubuntu.com/p/RDdFsZRwYw/

标签: 图像识别

非特殊说明,本博所有文章均为博主原创。