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检测网页是否有日常链接
Jun 03 Python
python根据日期返回星期几的方法
Jul 06 Python
Python实现读写sqlite3数据库并将统计数据写入Excel的方法示例
Aug 07 Python
Python OpenCV实现图片上输出中文
Jan 22 Python
Python 获取主机ip与hostname的方法
Dec 17 Python
python利用跳板机ssh远程连接redis的方法
Feb 19 Python
Python3+Pycharm+PyQt5环境搭建步骤图文详解
May 29 Python
给大家整理了19个pythonic的编程习惯(小结)
Sep 25 Python
Python socket模块方法实现详解
Nov 05 Python
Pytorch 定义MyDatasets实现多通道分别输入不同数据方式
Jan 15 Python
Python Socket TCP双端聊天功能实现过程详解
Jun 15 Python
python GUI模拟实现计算器
Jun 22 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数据缓存技术
2007/02/14 PHP
javascript,php获取函数参数对象的代码
2011/02/03 PHP
关于php正则匹配汉字的方法介绍
2013/04/25 PHP
php遍历目录输出目录及其下的所有文件示例
2014/01/27 PHP
Linux下从零开始安装配置Nginx服务器+PHP开发环境
2015/12/21 PHP
PHP使用自定义方法实现数组合并示例
2016/07/07 PHP
解决php写入数据库乱码的问题
2019/09/17 PHP
setInterval 和 setTimeout会产生内存溢出
2008/02/15 Javascript
JQuery自定义事件的应用 JQuery最佳实践
2010/08/01 Javascript
关于jquery ajax 调用带参数的webservice返回XML数据一个小细节
2012/07/31 Javascript
js+jquery实现图片裁剪功能
2015/01/02 Javascript
jQuery+PHP+MySQL二级联动下拉菜单实例讲解
2015/10/27 Javascript
Function.prototype.apply()与Function.prototype.call()小结
2016/04/27 Javascript
Bootstrap模态框(modal)垂直居中的实例代码
2016/08/18 Javascript
js轮播图透明度切换(带上下页和底部圆点切换)
2017/04/27 Javascript
Spring shiro + bootstrap + jquery.validate 实现登录、注册功能
2017/06/02 jQuery
Vue中computed与methods的区别详解
2018/03/24 Javascript
微信小程序如何再次获取用户授权的方法
2019/05/10 Javascript
简单了解JavaScript异步
2019/05/23 Javascript
前端开发基础javaScript的六大作用
2020/08/06 Javascript
vue-router 按需加载 component: () => import() 报错的解决
2020/09/22 Javascript
Django重装mysql后启动报错:No module named ‘MySQLdb’的解决方法
2018/04/22 Python
mac下pycharm设置python版本的图文教程
2018/06/13 Python
使用Python实现租车计费系统的两种方法
2018/09/29 Python
python地震数据可视化详解
2019/06/18 Python
python命名空间(namespace)简单介绍
2019/08/10 Python
浅谈Python 递归算法指归
2019/08/22 Python
Python 3.8正式发布,来尝鲜这些新特性吧
2019/10/15 Python
Python搭建代理IP池实现获取IP的方法
2019/10/27 Python
Python简易计算器制作方法代码详解
2019/10/31 Python
html5中使用hotcss.js实现手机端自适配的方法
2020/04/23 HTML / CSS
Becextech新西兰:数码单反相机和手机在线商店
2018/04/27 全球购物
积极贯彻学习两会精神总结
2014/03/17 职场文书
爱护公共设施标语
2014/06/24 职场文书
赞助商致辞
2015/07/30 职场文书
大学生各类奖学金申请书
2019/06/24 职场文书