python之cv2与图像的载入、显示和保存实例


Posted in Python onDecember 05, 2018

本文是OpenCV 2 Computer Vision Application Programming Cookbook读书笔记的第一篇。在笔记中将以Python语言改写每章的代码。

PythonOpenCV的配置这里就不介绍了。

注意,现在OpenCV for Python就是通过NumPy进行绑定的。所以在使用时必须掌握一些NumPy的相关知识!

图像就是一个矩阵,在OpenCV for Python中,图像就是NumPy中的数组!

如果读取图像首先要导入OpenCV包,方法为:

import cv2

读取并显示图像

在Python中不需要声明变量,所以也就不需要C++中的cv::Mat xxxxx了。只需这样:

img = cv2.imread("D:\cat.jpg")

OpenCV目前支持读取bmp、jpg、png、tiff等常用格式。更详细的请参考OpenCV的参考文档。

接着创建一个窗口

cv2.namedWindow("Image")

然后在窗口中显示图像

cv2.imshow("Image", img)

最后还要添上一句:

cv2.waitKey (0)

如果不添最后一句,在IDLE中执行窗口直接无响应。在命令行中执行的话,则是一闪而过。

完整的程序为:

import cv2 
 
img = cv2.imread("D:\\cat.jpg") 
cv2.namedWindow("Image") 
cv2.imshow("Image", img) 
cv2.waitKey (0) 
cv2.destroyAllWindows()

最后释放窗口是个好习惯!

创建/复制图像

新的OpenCV的接口中没有CreateImage接口。即没有cv2.CreateImage这样的函数。如果要创建图像,需要使用numpy的函数(现在使用OpenCV-Python绑定,numpy是必装的)。如下:

emptyImage = np.zeros(img.shape, np.uint8)

在新的OpenCV-Python绑定中,图像使用NumPy数组的属性来表示图像的尺寸和通道信息。如果输出img.shape,将得到(500, 375, 3),这里是以OpenCV自带的cat.jpg为示例。最后的3表示这是一个RGB图像。

也可以复制原有的图像来获得一副新图像。

emptyImage2 = img.copy();

如果不怕麻烦,还可以用cvtColor获得原图像的副本。

emptyImage3=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 
#emptyImage3[...]=0

后面的emptyImage3[...]=0是将其转成空白的黑色图像。

保存图像

保存图像很简单,直接用cv2.imwrite即可。

cv2.imwrite("D:\\cat2.jpg", img)

第一个参数是保存的路径及文件名,第二个是图像矩阵。其中,imwrite()有个可选的第三个参数,如下:

cv2.imwrite("D:\\cat2.jpg", img,[int(cv2.IMWRITE_JPEG_QUALITY), 5])

第三个参数针对特定的格式: 对于JPEG,其表示的是图像的质量,用0-100的整数表示,默认为95。 注意,cv2.IMWRITE_JPEG_QUALITY类型为Long,必须转换成int。下面是以不同质量存储的两幅图:

python之cv2与图像的载入、显示和保存实例

对于PNG,第三个参数表示的是压缩级别。cv2.IMWRITE_PNG_COMPRESSION,从0到9,压缩级别越高,图像尺寸越小。默认级别为3:

cv2.imwrite("./cat.png", img, [int(cv2.IMWRITE_PNG_COMPRESSION), 0]) 
cv2.imwrite("./cat2.png", img, [int(cv2.IMWRITE_PNG_COMPRESSION), 9])

保存的图像尺寸如下:

python之cv2与图像的载入、显示和保存实例

还有一种支持的图像,一般不常用。

完整的代码为:

import cv2 
import numpy as np 
 
img = cv2.imread("./cat.jpg") 
emptyImage = np.zeros(img.shape, np.uint8) 
 
emptyImage2 = img.copy() 
 
emptyImage3=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 
#emptyImage3[...]=0 
 
cv2.imshow("EmptyImage", emptyImage) 
cv2.imshow("Image", img) 
cv2.imshow("EmptyImage2", emptyImage2) 
cv2.imshow("EmptyImage3", emptyImage3) 
cv2.imwrite("./cat2.jpg", img, [int(cv2.IMWRITE_JPEG_QUALITY), 5]) 
cv2.imwrite("./cat3.jpg", img, [int(cv2.IMWRITE_JPEG_QUALITY), 100]) 
cv2.imwrite("./cat.png", img, [int(cv2.IMWRITE_PNG_COMPRESSION), 0]) 
cv2.imwrite("./cat2.png", img, [int(cv2.IMWRITE_PNG_COMPRESSION), 9]) 
cv2.waitKey (0) 
cv2.destroyAllWindows()

以上这篇python之cv2与图像的载入、显示和保存实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用IronPython把Python脚本集成到.NET程序中的教程
Mar 31 Python
使用Python编写简单的端口扫描器的实例分享
Dec 18 Python
python字符类型的一些方法小结
May 16 Python
Python基于回溯法子集树模板解决最佳作业调度问题示例
Sep 08 Python
python3.5绘制随机漫步图
Aug 27 Python
详解利用django中间件django.middleware.csrf.CsrfViewMiddleware防止csrf攻击
Oct 09 Python
解决python3 pika之连接断开的问题
Dec 18 Python
Python 实现文件打包、上传与校验的方法
Feb 13 Python
Python使用20行代码实现微信聊天机器人
Jun 05 Python
Python3爬虫关于识别检验滑动验证码的实例
Jul 30 Python
协程Python 中实现多任务耗资源最小的方式
Oct 19 Python
Python xlwings插入Excel图片的实现方法
Feb 26 Python
python存储16bit和32bit图像的实例
Dec 05 #Python
Python随机生成身份证号码及校验功能
Dec 04 #Python
python 从文件夹抽取图片另存的方法
Dec 04 #Python
使用Python实现微信提醒备忘录功能
Dec 04 #Python
flask-restful使用总结
Dec 04 #Python
Python读取YUV文件,并显示的方法
Dec 04 #Python
对Python3+gdal 读取tiff格式数据的实例讲解
Dec 04 #Python
You might like
php二分查找二种实现示例
2014/03/12 PHP
如何实现JS函数的重载
2006/09/22 Javascript
鼠标事件延时切换插件
2011/03/12 Javascript
jquery插件开发注意事项小结
2013/06/04 Javascript
解析javascript 浏览器关闭事件
2013/07/08 Javascript
JavaScript给url网址进行encode编码的方法
2015/03/18 Javascript
js获取数组的最后一个元素
2015/04/14 Javascript
javascript字符串循环匹配实例分析
2015/07/17 Javascript
jQuery使用animate实现ul列表项相互飘动效果示例
2016/09/16 Javascript
基于原生js淡入淡出函数封装(兼容IE)
2016/10/20 Javascript
jquery插入兄弟节点的操作方法
2016/12/07 Javascript
xmlplus组件设计系列之图标(ICON)(1)
2017/05/05 Javascript
Angular.JS通过指令操作DOM的方法
2017/05/10 Javascript
微信小程序上传图片到服务器实例代码
2017/11/07 Javascript
Vue filter格式化时间戳时间成标准日期格式的方法
2018/09/16 Javascript
JS实现的点击按钮图片上下滚动效果示例
2019/01/28 Javascript
微信小程序学习笔记之本地数据缓存功能详解
2019/03/29 Javascript
Layui多选只有最后一个值的解决方法
2019/09/02 Javascript
Python datetime时间格式化去掉前导0
2014/07/31 Python
跟老齐学Python之画圈还不简单吗?
2014/09/20 Python
星球大战与Python之间的那些事
2016/01/07 Python
pip安装py_zipkin时提示的SSL问题对应
2018/12/29 Python
django框架F&Q 聚合与分组操作示例
2019/12/12 Python
Python逐行读取文件内容的方法总结
2020/02/14 Python
Python colormap库的安装和使用详情
2020/10/06 Python
python 模拟登陆163邮箱
2020/12/15 Python
纯CSS3编写的的精美动画进度条(无flash/无图像/无脚本/附源码)
2013/01/07 HTML / CSS
美国彩妆品牌:Coastal Scents
2017/04/01 全球购物
中科方德软件测试面试题
2016/04/21 面试题
法律专业应届本科毕业生求职信
2013/10/25 职场文书
少先队辅导员事迹材料
2014/12/24 职场文书
2015年街道除四害工作总结
2015/05/15 职场文书
MySQL infobright的安装步骤
2021/04/07 MySQL
解决Django transaction进行事务管理踩过的坑
2021/04/24 Python
Java如何实现树的同构?
2021/06/22 Java/Android
volatile保证可见性及重排序方法
2022/08/05 Java/Android