目标

  • 在这里,你将学习如何读取图像,如何显示图像以及如何将其保存回去
  • 你将学习以下功能:cv.imread()cv.imshow()cv.imwrite()
  • (可选)你将学习如何使用Matplotlib显示图像

使用OpenCV

读取图像

使用cv.imread()函数读取图像。图像应该在工作目录或图像的完整路径应给出。

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

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

注意
除了这三个标志,你可以分别简单地传递整数1、0或-1。

请参见下面的代码:

import numpy as np
import cv2 as cv#加载彩色灰度图像
img = cv.imread('messi5.jpg',0)

警告

即使图像路径错误,它也不会引发任何错误,但是print img会给出None

显示图像

使用函数**cv.imshow()**在窗口中显示图像。窗口自动适合图像尺寸。

第一个参数是窗口名称,它是一个字符串。第二个参数是我们的对象。你可以根据需要创建任意多个窗口,但可以使用不同的窗口名称。

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

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

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

注意
除了键盘绑定事件外,此功能还处理许多其他GUI事件,因此你必须使用它来实际显示图像。

cv.destroyAllWindows()只会破坏我们创建的所有窗口。如果要销毁任何特定的窗口,请使用函数 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'): # 等待关键字,保存和退出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([])  # 隐藏 x 轴和 y 轴上的刻度值
plt.show()

窗口的屏幕截图如下所示:

还可以看看

Matplotlib中提供了许多绘图选项。请参考Matplotlib文档以获取更多详细信息。一些,我们将在路上看到。

警告

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

其他资源

  1. Matplotlib绘图样式和功能:http://matplotlib.org/api/pyplot_api.html

练习题

  1. 当你尝试在OpenCV中加载彩色图像并将其显示在Matplotlib中时,存在一些问题。阅读此讨论:http://stackoverflow.com/a/15074748/1134940)并理解它。

欢迎关注磐创博客资源汇总站:
http://docs.panchuang.net/

欢迎关注PyTorch官方中文教程站:
http://pytorch.panchuang.net/

OpenCV-Python 读取显示图像 | 五相关推荐

  1. python的image读取的图片是什么类型的-opencv python 读取图像/显示图像/保存图像...

    以前也用过opencv, 不过都是按需使用, 掌握的知识很零散, 这次希望能够系统学习opencv-python 本文直接从Gui Features开始. 1 读取图片 使用cv2.imread()函 ...

  2. pythonopencv显示图像_OpenCV-Python 读取显示图像 | 五

    目标 在这里,你将学习如何读取图像,如何显示图像以及如何将其保存回去 你将学习以下功能:cv.imread(),cv.imshow(),cv.imwrite() (可选)你将学习如何使用Matplot ...

  3. python读取摄像头数据_python 读取摄像头数据并保存的实例

    python如何能采集多个摄像头的数据 .要用opencv吗?听说这个问题不好解决啊只有把自己过得像王后一样,才能吸引你想要的国王. 可以,用PYQT+CV2,四个USB连接成功,程序如下,UI要自己 ...

  4. 同时基于c++与python版本的opencv进行读取,显示,修改,保存图片操作

    文章目录 同时基于c++与python版本的opencv进行读取,显示,修改,保存图片操作 一.基于c++的opencv 1.c++版本代码 2.代码结果展示 3.API构成及其参数说明 4.注意事项 ...

  5. python opencv二值化图像_python opencv,读取彩色图像,提取三通道,图像二值化,提取图像的边缘...

    python opencv,读取彩色图像,提取三通道,图像二值化,提取图像的边缘 python opencv 1,读取图像 2,图像变矩阵 3,图像转灰度图像 4,彩色图像是3D数组 5,灰度图像是2 ...

  6. 使用OpenCV python模块读取图像并将其另存为灰度系统

    In Python, we can use an OpenCV library named cv2. Python does not come with cv2, so we need to inst ...

  7. python opencv如何读取本地视频并显示 cv2.VideoCapture()

    import cv2cap = cv2.VideoCapture('Video_2020-01-06_101858.wmv')while cap.isOpened():ret, frame = cap ...

  8. 手写数字图片数据之python读取保存、二值化、灰度化图片+opencv处理图片的方法

    python 读取.保存.二值化.灰度化图片+opencv处理图片的方法 进行手写数字的图片预测的时候碰到了这样的问题. 先说说处理图片有三种方式 一.matplotlib 二.PIL 三.openc ...

  9. 【ZED】从零开始使用ZED相机(五):Opencv+Python实现相机标定(双目)

    引言 同样Opencv+Python实现双目相机的标定,单目标定详见[ZED]从零开始使用ZED相机(五):Opencv+Python实现相机标定(单目) 1 cv2.stereoCalibrate ...

最新文章

  1. python卸载模块的方法汇总_Python卸载模块的方法汇总
  2. python socket 书籍_Python学习之路——socket
  3. 【HAOI2018】染色【反向二项式反演】【NTT卷积】
  4. HTTP代理原理以及HTTP隧道技术
  5. sublime运行python代码_怎么用sublime运行python
  6. 【Elasticsearch】Elasticsearch 缓存策略 QueryCacheingPolicy
  7. gulp教程之gulp-autoprefixer
  8. mysql 结果倒置_菜鸟 问下PHP取出MYSQL数据,然后倒置顺序
  9. python将excel导入生成矩阵_Python导入数值型Excel数据并生成矩阵操作
  10. c语言用单链表实现lru算法,利用单链表实现LRU算法
  11. Resharper:还记得NHibernate之夏中那如梦般的代码自动工具吗?
  12. 【[SDOi2012]Longge的问题】
  13. Flex 与外部的数据通信(HTTPService,URLLoader和URLRequest)
  14. python 比对两个excel表数据_python 如何快速找出两个电子表中数据的差异
  15. 一根均线选股法_“傻瓜式炒股法”——20日均线一根均线买入法,简单很实用!...
  16. 什么是ADB,什么是MC
  17. 软件开发工具的使用与开发
  18. 面试和谈薪技巧及如何避开常见的陷阱
  19. mysql跨平台迁移复制_手工 XTTS CPT 迁移-跨平台迁移数据库-阿里云开发者社区
  20. 刀片服务器的故障信息,刀片服务器故障

热门文章

  1. 论文编辑中wps问题和技巧
  2. java试题下载_Java基础笔试100道考试题 TXT版
  3. 对抗机器学习和对抗学习
  4. python实验题第四章_「Python」2020.03.16学习笔记 | 第四章列表、元组、字典-习题(11-13)...
  5. 爬取美食杰川菜照片及照片命名
  6. “北外女孩”真相:腾讯网与普天同庆联手炒作
  7. 关于应届生寻找第一份工作需要注意和考量的点
  8. KL散度解释——来自COUNT BAYESIE
  9. vue跳转页面的几种方法
  10. freenode_Freenode ## java有趣的内容播客