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 相关文章推荐
python比较2个xml内容的方法
May 11 Python
Python 功能和特点(新手必学)
Dec 30 Python
Python中工作日类库Busines Holiday的介绍与使用
Jul 06 Python
python调用Delphi写的Dll代码示例
Dec 05 Python
Python基于列表list实现的CRUD操作功能示例
Jan 05 Python
Python面向对象程序设计构造函数和析构函数用法分析
Apr 12 Python
python pygame实现方向键控制小球
May 17 Python
Python批量生成幻影坦克图片实例代码
Jun 04 Python
pyftplib中文乱码问题解决方案
Jan 11 Python
Python中的wordcloud库安装问题及解决方法
May 27 Python
基于Python的身份证验证识别和数据处理详解
Nov 14 Python
Python面试不修改数组找出重复的数字
May 20 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+mysqli预处理技术实现添加、修改及删除多条数据的方法
2015/01/30 PHP
8个必备的PHP功能开发
2015/10/02 PHP
smarty模板数学运算示例
2016/12/11 PHP
php 7新特性之类型申明详解
2017/06/06 PHP
PHP设计模式之数据访问对象模式(DAO)原理与用法实例分析
2019/12/12 PHP
用AJAX返回HTML片段中的JavaScript脚本
2010/01/04 Javascript
jquery 判断滚动条到达了底部和顶端的方法
2014/04/02 Javascript
javascript页面渲染速度测试脚本分享
2014/04/15 Javascript
按钮接受回车事件的三种实现方法
2014/06/06 Javascript
js实现同一页面可多次调用的图片幻灯切换效果
2015/02/28 Javascript
JavaScript获取当前网页最后修改时间的方法
2015/04/03 Javascript
基于jQuery+JSON的省市二三级联动效果
2015/06/05 Javascript
EasyUI加载完Html内容样式渲染完成后显示
2016/07/25 Javascript
微信小程序 loading 详解及实例代码
2016/11/09 Javascript
深入探究AngularJs之$scope对象(作用域)
2017/07/20 Javascript
vue路由事件beforeRouteLeave及组件内定时器的清除方法
2018/09/29 Javascript
微信小程序后台持续定位功能使用详解
2019/08/23 Javascript
小程序怎样让wx.navigateBack更好用的方法实现
2019/11/01 Javascript
Python with用法实例
2015/04/14 Python
python邮件发送smtplib使用详解
2020/06/16 Python
pyshp创建shp点文件的方法
2018/12/31 Python
利用OpenCV和Python实现查找图片差异
2019/12/19 Python
python实现在一个画布上画多个子图
2020/01/19 Python
Python3 selenium 实现QQ群接龙自动化功能
2020/04/17 Python
德国购买踏板车网站:Microscooter
2019/10/14 全球购物
常见的软件开发流程有哪些
2015/11/14 面试题
合同专员岗位职责
2013/12/18 职场文书
建筑总经理岗位职责
2014/02/02 职场文书
实习推荐信
2014/05/10 职场文书
离婚协议书包括哪些内容
2014/10/16 职场文书
2014超市收银员工作总结
2014/11/13 职场文书
复兴之路纪录片观后感
2015/06/02 职场文书
时尚女魔头观后感
2015/06/04 职场文书
vue3如何优雅的实现移动端登录注册模块
2021/03/29 Vue.js
Python django中如何使用restful框架
2021/06/23 Python
canvas 中如何实现物体的框选
2022/08/05 Javascript