1-1 有关图片的操作——OpenCV-Python教程翻译

目标

  • 学会如何读取一张图像,如何展示和如何保存
  • 学会使用函数:cv2.imread(),cv2.imshow(),cv2.imwrite()
  • 学会如何使用Matplotlib展示图像

使用OpenCV

读取图片

使用函数cv2.imread()读取一张图片。图片必须在工作文件夹里或者给定完整的绝对路径。

retval = cv2.imread(filename[, flags])

其中,第二个参数指定读取图片的方式,常用有如下三种(其余方式参见手册)

  • cv2.IMREAD_COLOR:加载彩色图片,忽略图像的透明部分,是函数的默认参数
  • cv2.IMREAD_GRAYSCALE:以灰度模式读取图片
  • cv2.IMREAD_UNCHANGED:不改变图片,读取图片包括alpha通道。
  • 可以分别使用1,0,-1代替上面三个标志
import numpy as np
import cv2
# Load an color image in grayscale
img = cv2.imread('messi5.jpg',0)

注意:如果图片路径错误,不会抛出异常,但是如果使用print(img)会返回None提示没有图片读入。

显示图片

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

None = cv2.imshow(winname, mat)

第一个参数是窗口名称,可以是一个字符串,第二个参数是显示的图片。

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

cv2.waitKey()是一个键盘输入函数。它的参数是时间,单位是毫秒。函数等待指定的时间当产生键盘事件时。

cv2.destoryAllWindows()删除我们创建的窗口。

注意:有一种特殊情况是先创建一个窗口,之后再加载图片,并且可以指定窗口是否可以修改大小。使用函数cv2.namedWindow()实现上述功能,默认的标签为cv2.WINDOW_AUTOSIZE,但是当指定标签为cv2.WINDOW_NORMAL时,可以修改窗口尺寸,这样有助于当图片尺寸较大的时候显示图片。

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

保存图片

使用函数cv2.imwrite()来保存图片。retval = cv2.imwrite(filename, imh[, params])

其中,第一个参数是文件名,第二个参数是想要保存的图片。

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

上面的语句将图片以png格式保存到工作路径下。

案例

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()

上面的代码将以灰度图的形式加载一张图片,并显示图片,当键盘输入'S'时,保存图片并退出,当输入‘ESC’时仅退出。

注意:如果使用64位电脑,需要将k = cv.waitKey(0)改为k = cv.waitKey(0) & 0xFF。

使用Matplotlib

Matplotlib是一个提供多种绘图方法的Python绘图库。下面将展示如何使用Matplotlib去显示图片,实现图片缩放和保存功能。

import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread('lena521.png',0)
plt.imshow(img, cmap = 'gray', interpolation = 'bicubic')
plt.xticks([]), plt.yticks([])  # to hide tick values on X and Y axis
plt.show()

注意:OpenCV是以BGR模式加载彩色图片,而Matplotlib则是以RGB模式显示。所以如何使用OpenCV读取图片再用Matplotlib显示会导致显示错误。

猜你喜欢

转载自blog.csdn.net/qq_22235957/article/details/81058207
今日推荐