【翻译】OpenCV-Python教程(图像入门)

⚠️这个系列是自己瞎翻的,文法很丑,跳着跳着捡重要的部分翻,翻错了不负责,就这样。

⚠️基于3.4.3,Getting Started with Images,原文

目标 

  • 在此,你会学到如何读取一个图像,如何显示它,如何再把它保存回来。
  • 你会学到这些方法 : cv.imread()cv.imshow() , cv.imwrite()
  • 顺带,你会学到如何用Matplotlib显示图像

使用OpenCV 

读取图像

使用方法 cv.imread() 来读取图像。图像应该被放在工作路径之下或者给出完整的路径地址。

第二个参数是一个用于表示读取图像的独特方式的标识。

提示

你可以分别简单的传入1,0 或者 -1来代替这三个标识。

看下面的代码: 

import numpy as np

import cv2 as cv

# 加载一张灰度图像

扫描二维码关注公众号,回复: 3399083 查看本文章

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() 简单的销毁所有我们创建的窗口。如果你想要销毁一个特定的窗口, 使用fa 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: # 等你按ESC键退出

cv.destroyAllWindows()

elif k == ord('s'): # 等你按s键就保存再退出

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

img = cv.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的文档来了解更多细节。我们在学习道路上也会遇到一些。Plenty of plotting options are available in Matplotlib. Please refer to Matplotlib docs for more details. Some, we will see on the way.

警告

OpenCV加载彩图用的是BGR(蓝绿红三色)模式。但Matplotlib显示使用的是RGB(红绿蓝三色)模式。所以彩图无法在Matplotlib里正常显示,如果这个图是用OpenCV读的的话。请看练习获取更多细节。

额外资源 

  1. Matplotlib测绘模式和特征

练习 

  1. 当你想用Matplotlib显示用OpenCV读到的彩图的话会遇到一些问题。读一下这个讨论并且了解它。

猜你喜欢

转载自blog.csdn.net/ssybc/article/details/82315180