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写的一个squid访问日志分析的小程序
Sep 17 Python
说一说Python logging
Apr 15 Python
Django中redis的使用方法(包括安装、配置、启动)
Feb 21 Python
使用Python实现在Windows下安装Django
Oct 17 Python
详解django自定义中间件处理
Nov 21 Python
Python3爬虫教程之利用Python实现发送天气预报邮件
Dec 16 Python
对python多线程中互斥锁Threading.Lock的简单应用详解
Jan 11 Python
Python之修改图片像素值的方法
Jul 03 Python
pip安装python库的方法总结
Aug 02 Python
python 列表、字典和集合的添加和删除操作
Dec 16 Python
Python实现CNN的多通道输入实例
Jan 17 Python
opencv python在视屏上截图功能的实现
Mar 05 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 class类的用法详细总结
2013/10/17 PHP
php遍历目录输出目录及其下的所有文件示例
2014/01/27 PHP
使用ThinkPHP+Uploadify实现图片上传功能
2014/06/26 PHP
php从身份证获取性别和出生年月
2017/02/09 PHP
JS版网站风格切换实例代码
2008/10/06 Javascript
javascript 读取图片文件的大小
2009/06/25 Javascript
页面版文本框智能提示JS代码
2009/11/20 Javascript
jQuery Ajax 仿AjaxPro.Utility.RegisterTypeForAjax辅助方法
2011/09/27 Javascript
JavaScript判断DOM何时加载完毕的技巧
2012/11/11 Javascript
JS 获取滚动条高度示例代码
2013/10/24 Javascript
js购物车实现思路及代码(个人感觉不错)
2013/12/23 Javascript
js完美实现@提到好友特效(兼容各大浏览器)
2015/03/16 Javascript
JavaScript监听文本框回车事件并过滤文本框空格的方法
2015/04/16 Javascript
javascript实现完美拖拽效果
2015/05/06 Javascript
实例讲解使用原生JavaScript处理AJAX请求的方法
2016/05/10 Javascript
js实现模糊匹配功能
2017/02/15 Javascript
canvas 实现中国象棋
2017/02/17 Javascript
详解vue表单验证组件 v-verify-plugin
2017/04/19 Javascript
webpack配置导致字体图标无法显示的解决方法
2018/03/06 Javascript
详解javascript中的babel到底是什么
2018/06/21 Javascript
webstorm建立vue-cli脚手架的傻瓜式教程
2020/09/22 Javascript
linux下python抓屏实现方法
2015/05/22 Python
Python中字符串的格式化方法小结
2016/05/03 Python
解决Tensorflow安装成功,但在导入时报错的问题
2018/06/13 Python
Django中日期处理注意事项与自定义时间格式转换详解
2018/08/06 Python
Python使用Flask-SQLAlchemy连接数据库操作示例
2018/08/31 Python
利用python和百度地图API实现数据地图标注的方法
2019/05/13 Python
Python利用for循环打印星号三角形的案例
2020/04/12 Python
python实现手势识别的示例(入门)
2020/04/15 Python
Python使用socket模块实现简单tcp通信
2020/08/18 Python
BannerBuzz加拿大:在线定制横幅印刷、广告和标志
2020/03/10 全球购物
刚毕业大学生自荐信范文
2014/02/20 职场文书
机关领导干部作风整顿整改措施
2014/09/19 职场文书
三峡大坝导游词
2015/01/31 职场文书
海底两万里读书笔记
2015/06/26 职场文书
Java时间工具类Date的常用处理方法
2022/05/25 Java/Android