Opencv-Python :图片读取、保存、显示

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_28413479/article/details/78088981
  • 打开图片,显示,保存图片
  • cv2.imread(), cv2.imshow(), cv2.imwrite()
  • 如何用Matplotlib显示图片
  • 使用OpenCV

读入图片

使用函数cv2.imread()来打开图片,图片要么在当前工作目录,要么是全路径。

第二个参数是一个标志位,用来指定打开的方式。

·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() 来在窗口里显示图片,窗口自动适配图片大小。

第一个参数是窗口名称,是字符串。第二个参数是我们的图片,你想创建多少窗口都可以,但是得给不同的窗口不同的名字。

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

cv2.waitKey()是一个键盘绑定函数。它的参数是毫秒数,这个函数会等待任意键盘事件指定的毫秒时间。如果你点了任意键,这个程序继续。如果传入0,它会一直等待按键。它也可以设置成检测指定键,比如如果a被按了,后面我们会讲

cv2.destroyAllWindows()销毁所有的我们创建的窗口,如果你想销毁指定的窗口,使用函数cv2.destroyWindow()你可以传指定窗口的名字作为参数。

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

注意:

有种特殊情况你可以先创建窗口,再把图片加载到里面。在这种情况下,你可以指定窗口是否可以改变大小。这是通过函数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()来写入图片。

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

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:                 # 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位的机器,你需要把k = cv2.waitKey(0) 这行换成:

k = cv2.waitKey(0) & 0xFF

使用Matplotlib

Matplotlib是一个Python的绘图库,提供了多种多样的绘图方法。这里是用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还有更多的绘图选项。

警告:

OpenCV加载的彩色图片是BGR模式的。但是Matplotlib显示的是RGB模式的。所以彩色图片如果是通过OpenCV读入的在Matplotlib里会显示不正确。

参考链接:http://www.jianshu.com/p/357128398301

猜你喜欢

转载自blog.csdn.net/qq_28413479/article/details/78088981