这里我们使用工具为Python2.7,使用库numpy,opencv,从图片的导入到显示及保存,同时将图片变为灰度图

1、读入图像

cv2.imread(文件名,标记)

第一个参数图像应该在工作目录中,或者应该给出完整的图像路径。

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

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

除了上面这三个标志,你可以简单地传递整数1,0或-1。

#!/usr/bin/python
# -*- coding:utf8 -*-
import cv2
import numpy as np

# 普通模式加载,加载彩色图像
img = cv2.imread('messi5.jpg',cv2.IMREAD_COLOR)
# 简化模式加载,以灰度模式加载图像
img = cv2.imread('messi5.jpg',0)

2、显示图像

cv2.imshow()

使用函数cv2.imshow()在窗口中显示图像。该窗口自动适合图像大小。 第一个参数是一个字符串表示窗口名称。第二个参数是我们的image。您可以根据需要创建多个窗口,但需要使用不同的窗口名称。

cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
  • cv2.waitKey()等待键盘输入,为毫秒级
  • cv2.destroyAllWindows()可以轻易删除任何我们建立的所有窗口,如果要销毁任何特定的窗口,请使用函数cv2.destroyWindow(),在其中传入确切的窗口名称作为参数。
cv2.namedWindow('image', cv2.WINDOW_NORMAL)
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

3、保存图像

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

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

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

上面的代码会将图像以PNG格式保存在工作目录中。

4、总结一下

下面程序加载灰度图像,显示图像,按'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()

5、使用Matplotlib

MatplotlibPython的绘图库,可以为您提供各种绘图方法。你会看到他们在接下来的文章。在这里,您将学习如何使用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显示opencv图像

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


警告 OpenCV加载的彩色图像处于BGR模式。但Matplotlib以RGB模式显示。因此,如果使用OpenCV读取图像,则彩色图像将无法在Matplotlib中正确显示。请参阅练习了解更多详情。

其他资源

Matplotlib绘图样式和功能

联系

当您尝试在OpenCV中加载彩色图像并将其显示在Matplotlib中时,存在一些问题。阅读这个讨论并理解它。