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获取文件版本信息、公司名和产品名的方法
Oct 05 Python
Python中__name__的使用实例
Apr 14 Python
Python实现的简单算术游戏实例
May 26 Python
Python使用gensim计算文档相似性
Apr 10 Python
python中安装Scrapy模块依赖包汇总
Jul 02 Python
VSCode下配置python调试运行环境的方法
Apr 06 Python
python实现本地图片转存并重命名的示例代码
Oct 27 Python
pandas将多个dataframe以多个sheet的形式保存到一个excel文件中
Oct 10 Python
python3 tkinter实现添加图片和文本
Nov 26 Python
520使用Python实现“我爱你”表白
May 20 Python
Python使用eval函数执行动态标表达式过程详解
Oct 17 Python
sublime3之内网安装python插件Anaconda的流程
Nov 10 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
一个用php3编写的简单计数器
2006/10/09 PHP
mysql 字段类型说明
2007/04/27 PHP
提示Trying to clone an uncloneable object of class Imagic的解决
2011/10/27 PHP
一个简单的js树形菜单
2011/12/09 Javascript
jquery实现微博文字输入框 输入时显示输入字数 效果实现
2013/07/12 Javascript
javascript读写XML实现广告轮换(兼容IE、FF)
2013/08/09 Javascript
input禁止键盘及中文输入,但可以点击
2014/02/13 Javascript
js实现简单随机抽奖的方法
2015/01/27 Javascript
纯JavaScript实现的兼容各浏览器的添加和移除事件封装
2015/03/28 Javascript
JavaScript Function函数类型介绍
2015/04/08 Javascript
jQuery操作Table技巧大汇总
2016/01/23 Javascript
JavaScript判断是否是微信浏览器
2016/06/13 Javascript
通过扫描二维码打开app的实现代码
2016/11/10 Javascript
jquery PrintArea 实现票据的套打功能(代码)
2017/03/17 Javascript
ES6中Proxy代理用法实例浅析
2017/04/06 Javascript
详解最新vue-cli 2.9.1的webpack存在问题
2017/12/16 Javascript
个人小程序接入支付解决方案
2019/05/23 Javascript
vue-socket.io接收不到数据问题的解决方法
2020/05/13 Javascript
js实现移动端轮播图滑动切换
2020/12/21 Javascript
Python中的多重装饰器
2015/04/11 Python
python将unicode转为str的方法
2017/06/21 Python
python读取tif图片时保留其16bit的编码格式实例
2020/01/13 Python
python实现文件分片上传的接口自动化
2020/11/19 Python
html5自动播放mov格式视频的实例代码
2020/01/14 HTML / CSS
Ray-Ban雷朋西班牙官网:全球领先的太阳眼镜品牌
2018/11/28 全球购物
关于学习的演讲稿
2014/05/10 职场文书
公司离职证明范本(汇总)
2014/09/10 职场文书
老公写给老婆的检讨书
2015/05/06 职场文书
讲座开场白台词和结束语
2015/05/29 职场文书
新年祝酒词大全
2015/08/11 职场文书
中学图书馆工作总结
2015/08/11 职场文书
电力安全教育培训心得体会
2016/01/11 职场文书
500字作文之周记
2019/12/13 职场文书
tensorflow学习笔记之tfrecord文件的生成与读取
2021/03/31 Python
Python中常见的导入方式总结
2021/05/06 Python
MySQL批量更新不同表中的数据
2022/05/11 MySQL