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 ORM框架SQLAlchemy学习笔记之数据查询实例
Jun 10 Python
Python中内建函数的简单用法说明
May 05 Python
Python中xrange与yield的用法实例分析
Dec 26 Python
python list元素为tuple时的排序方法
Apr 18 Python
Python 查找字符在字符串中的位置实例
May 02 Python
python hough变换检测直线的实现方法
Jul 12 Python
django foreignkey(外键)的实现
Jul 29 Python
Python数据可视化 pyecharts实现各种统计图表过程详解
Aug 15 Python
设置jupyter中DataFrame的显示限制方式
Apr 12 Python
opencv 图像腐蚀和图像膨胀的实现
Jul 07 Python
django rest framework 过滤时间操作
Jul 12 Python
利用Python多线程实现图片下载器
Mar 25 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
Oracle 常见问题解答
2006/10/09 PHP
php关闭warning问题的解决方法
2016/05/17 PHP
PHPMailer发送邮件
2016/12/28 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
PHP简单实现正则匹配省市区的方法
2018/04/13 PHP
Laravel框架路由设置与使用示例
2018/06/12 PHP
laravel框架 laravel-admin上传图片到oss的方法
2019/10/13 PHP
Laravel使用模型实现like模糊查询的例子
2019/10/24 PHP
Thinkphp 框架扩展之Widget扩展实现方法分析
2020/04/23 PHP
javascript得到XML某节点的子节点个数的脚本
2008/10/11 Javascript
js利用Array.splice实现Array的insert/remove
2009/01/13 Javascript
Jsonp 跨域的原理以及Jquery的解决方案
2011/06/27 Javascript
5个javascript的数字格式化函数分享
2011/12/07 Javascript
Jquery取得iframe下内容的方法
2013/11/18 Javascript
jQuery获得包含margin的outerWidth和outerHeight的方法
2015/03/25 Javascript
jQuery的几个我们必须了解的特点
2015/05/03 Javascript
AngularJS学习笔记之基本指令(init、repeat)
2015/06/16 Javascript
node.js抓取并分析网页内容有无特殊内容的js文件
2015/11/17 Javascript
javascript类型系统——日期Date对象全面了解
2016/07/13 Javascript
js将table的每个td的内容自动赋值给其title属性的方法
2016/10/13 Javascript
IE8兼容Jquery.validate.js的问题
2016/12/01 Javascript
微信小程序实现页面跳转传值的方法
2017/10/12 Javascript
利用Node.js检测端口是否被占用的方法
2017/12/07 Javascript
利用Node.js批量抓取高清妹子图片实例教程
2018/08/02 Javascript
pm2发布node配置文件ecosystem.json详解
2019/05/15 Javascript
node解析修改nginx配置文件操作实例分析
2019/11/06 Javascript
JavaScript ES 模块的使用
2020/11/12 Javascript
python可视化text()函数使用详解
2020/02/11 Python
Python faker生成器生成虚拟数据代码实例
2020/07/20 Python
Python调用SMTP服务自动发送Email的实现步骤
2021/02/07 Python
详解CSS3伸缩布局盒模型Flex布局
2018/08/20 HTML / CSS
英国知名的护肤彩妆与时尚配饰大型综合零售电商:Unineed
2016/11/21 全球购物
一个SQL面试题
2014/08/21 面试题
与美同行演讲稿
2014/09/13 职场文书
2019新学期家长会工作计划
2019/08/21 职场文书
解析Java异步之call future
2021/06/14 Java/Android