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 smallseg分词用法实例分析
May 28 Python
Python使用面向对象方式创建线程实现12306售票系统
Dec 24 Python
Python读取一个目录下所有目录和文件的方法
Jul 15 Python
深入解答关于Python的11道基本面试题
Apr 01 Python
Python中asyncio与aiohttp入门教程
Oct 16 Python
Django uwsgi Nginx 的生产环境部署详解
Feb 02 Python
python Django编写接口并用Jmeter测试的方法
Jul 31 Python
PYTHON实现SIGN签名的过程解析
Oct 28 Python
调用其他python脚本文件里面的类和方法过程解析
Nov 15 Python
python中adb有什么功能
Jun 07 Python
python 制作本地应用搜索工具
Feb 27 Python
Python 如何利用ffmpeg 处理视频素材
Nov 27 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 数组的一个悲剧?
2011/05/11 PHP
PHP下通过exec获得计算机的唯一标识[CPU,网卡 MAC地址]
2011/06/09 PHP
php获取网页请求状态程序示例
2014/06/17 PHP
PHP与MYSQL中UTF8 中文排序示例代码
2014/10/23 PHP
用CSS+JS实现的进度条效果效果
2007/06/05 Javascript
JQuery实现用户名无刷新验证的小例子
2013/03/22 Javascript
使用Grunt.js管理你项目的应用说明
2013/04/24 Javascript
JavaScript的继承的封装介绍
2013/10/15 Javascript
onkeyup,onkeydown和onkeypress的区别介绍
2013/10/21 Javascript
js在IE与firefox的差异集锦
2014/11/11 Javascript
jQuery控制frames及frame页面JS的方法
2016/03/08 Javascript
Vue方法与事件处理器详解
2016/12/01 Javascript
javascript DOM的详解及实例代码
2017/03/06 Javascript
React简单介绍
2017/05/24 Javascript
JavaScript条件判断_动力节点Java学院整理
2017/06/26 Javascript
angular2中使用第三方js库的实例
2018/02/26 Javascript
浅析Vue中method与computed的区别
2018/03/06 Javascript
[原创]jQuery实现合并/追加数组并去除重复项的方法
2018/04/11 jQuery
JavaScript中的"=、==、==="区别讲解
2019/01/22 Javascript
详解小程序中h5页面onShow实现及跨页面通信方案
2019/05/30 Javascript
深入了解JavaScript 的 WebAssembly
2019/06/15 Javascript
javascript中的offsetWidth、clientWidth、innerWidth及相关属性方法
2020/05/14 Javascript
通过源码分析Python中的切片赋值
2017/05/08 Python
python入门:这篇文章带你直接学会python
2018/09/14 Python
基于CSS3实现立方体自转效果
2016/03/01 HTML / CSS
雪花秀美国官方网站:韩国著名草本护肤化妆品品牌
2016/10/19 全球购物
英国可持续奢侈品包包品牌:Elvis & Kresse
2018/08/05 全球购物
动物学专业毕业生求职信
2013/10/11 职场文书
公务员转正鉴定材料
2014/02/11 职场文书
委托公证书格式
2015/01/26 职场文书
刑事附带民事代理词
2015/05/25 职场文书
小学安全教育主题班会
2015/08/12 职场文书
读鲁迅先生的经典名言
2019/08/20 职场文书
React实现动效弹窗组件
2021/06/21 Javascript
Python re.sub 反向引用的实现
2021/07/07 Python
SQL中去除重复数据的几种方法汇总(窗口函数对数据去重)
2023/05/08 MySQL