OpenCV-Python入门教程1-图片
首先感觉学习OpenCV-python最好的学习工具官方的英文文档。
官方英文教程:OpenCV-Python Tutorials
我使用的是anaconda里的 jupyter notebook。至于如何安装,请自行百度。然后再安装 cv2包
快速、简洁、流行的python
众所周知,python的语法简洁,编写高效。但是运行速度,相比较C/C++来说就慢很多。但是Python是一门胶水语言!很容易扩展C/C++。OpenCV-Python就是用Python包装了C++的实现,背后实际上是C++的代码再跑,所以代码的运行速度跟原生C/C++速度一样快!而且python的代码量相比较C++来说,会少很多。此外,图像是矩阵数据,OpenCV-Python原生支持Numpy,相当于Python中的Matlab,为矩阵运算、科学计算提供了极大的便利。以上的所有特性都促进了Python的快速流行。

图像一般是(height,width)也就是坐标(y, x)这点不能弄混淆,后面还会提到
图像坐标的起始点是在左上角,所以行对应y,列对应x
使用OpenCV显示和保存图片
一、加载图片
import cv2
# 加载灰度图
img = cv2.imread('lena.jpg', 0)
参数1:图片的文件名
- 如果图片放在当前文件夹下,直接写文件名就行了,如
lena.jpg - 否则需要给出绝对路径,如
D:\OpenCVSamples\lena.jpg
参数2:读入方式,省略即采用默认值
- cv2.IMREAD_COLOR:彩色图,默认值(1)
- cv2.IMREAD_GRAYSCALE:灰度图(0)
- cv2.IMREAD_UNCHANGED:包含透明通道的彩色图(-1)
二、显示图片
# 窗口不可调节,窗口会自适应图片的大小
cv2.imshow('lena', img)
cv2.waitKey(0)
参数1是窗口的名字,参数2是要显示的图片。不同的窗口之间用窗口名区分,窗口名相同就表示同一个窗口

cv2.waitKey()让程序暂停,参数是等待时间(毫秒ms)。参数0表示一直等待。等待期间也可以获取用户输入
我们也可以先创建一个窗口,然后显示图片
# 先定义窗口,后显示图片
# 窗口可以调节
cv2.namedWindow('lena2', cv2.WINDOW_NORMAL)
cv2.imshow('lena2', img)
cv2.waitKey(0)
参数1是窗口名字,参数2默认是cv2.WINDOW_AUTOSIZE,表示窗口大小自适应图片,也可以设置为cv2.WINDOW_NORMAL,表示窗口大小可调整。图片较大时,可以考虑使用后者
三、保存图片
# 保存图片
cv2.imwrite('lena_gray.jpg', img)
四、小结
cv2.imread()读入图片、cv2.imshow()显示图片、cv2.imwrite()保存图片。
五、练习
打开lena.jpg并显示,如果按下's',就保存图片为'lena_save.bmp',否则就结束程序
# 练习
import cv2
img = cv2.imread('lena.jpg', 0)
cv2.imshow('lena', img)
k = cv2.waitKey(0) # ord()获取某个字符的编码
if k == ord('s'):
cv2.imwrite('lena_save.bmp', img)
前面都是使用Opencv读入、显示和保存图片函数。其实Python也有自己的绘图库---Matplotlib
使用Matplotlib显示图像
显示灰度图
import cv2
import matplotlib.pyplot as plt img = cv2.imread('lena.jpg', 0) # 灰度图显示,cmap(color map)设置为gray
plt.imshow(img, cmap='gray')
plt.show()

显示彩色图
OpenCV中的图像是以BGR的通道顺序存储的,但Matplotlib是以RGB模式显示的,所以直接在Matplotlib中显示需要转换一下:
import cv2
import matplotlib.pyplot as plt img = cv2.imread('lena.jpg')
img2 = img[:, :, ::-1] # 或者使用cv2.COLOR_BGR2RGB 其实这种写法更常见
#img2 = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 显示不正确的图
plt.subplot(121),plt.imshow(img) # 显示正确的图
plt.subplot(122)
plt.xticks([]),plt.yticks([]) # 隐藏x和y轴
plt.imshow(img2)
plt.show()

img[:, :, 0]表示蓝色通道,img[:, :, ::-1]表示BGR翻转,编程RGB
在Python中字符串s翻转可以这样写:s[::-1], 'abc'编程‘cba’,-1表示逆序
图片是二维的
img2 = img[:,:] # 写全就是:img2 = img[0:height,0:width]
图片有三个通道,相当于长度为3的字符串。所以通道翻转与图片复制组合起来便是img[:,:,::-1]。
加载和保存图片
import matplotlib.image as pli
img = pli.imread('lena.jpg')
plt.imshow(img)
# 保存图片,需放在show()函数之前
plt.savefig('lena2.jpg')
plt.show()
参考地址:https://tianchi.aliyun.com/course/courseConsole?courseId=40992&chapterIndex=1§ionIndex=10
OpenCV-Python入门教程1-图片的更多相关文章
- Python入门教程完整版(懂中文就能学会)
前几天给大家分享<从零学会Photoshop经典教程300集>的教程受到了广泛的关注,有人不知道怎么领取,居然称小编为"骗子". 不过小编的内心是强大的,网友虐我千百遍 ...
- VB6 GDI+ 入门教程[6] 图片
http://vistaswx.com/blog/article/category/tutorial/page/2 VB6 GDI+ 入门教程[6] 图片 2009 年 6 月 19 日 15条评论 ...
- 老鸟的Python入门教程
转自老鸟的Python入门教程 重要说明 这不是给编程新手准备的教程,如果您入行编程不久,或者还没有使用过1到2门编程语言,请移步!这是有一定编程经验的人准备的.最好是熟知Java或C,懂得命令行,S ...
- 2018-06-21 中文代码示例视频演示Python入门教程第五章 数据结构
知乎原链 续前作: 中文代码示例视频演示Python入门教程第四章 控制流 对应在线文档: 5. Data Structures 这一章起初还是采取了尽量与原例程相近的汉化方式, 但有些语义较偏(如T ...
- 2018-06-20 中文代码示例视频演示Python入门教程第四章 控制流
知乎原链 续前作: 中文代码示例视频演示Python入门教程第三章 简介Python 对应在线文档: 4. More Control Flow Tools 录制中出了不少岔子. 另外, 输入法确实是一 ...
- 2018-06-20 中文代码示例视频演示Python入门教程第三章 简介Python
知乎原链 Python 3.6.5官方入门教程中示例代码汉化后演示 对应在线文档: 3. An Informal Introduction to Python 不知如何合集, 请指教. 中文代码示例P ...
- Python入门教程 超详细1小时学会Python
Python入门教程 超详细1小时学会Python 作者: 字体:[增加 减小] 类型:转载 时间:2006-09-08我要评论 本文适合有经验的程序员尽快进入Python世界.特别地,如果你掌握Ja ...
- 极度舒适的 Python 入门教程,小猪佩奇也能学会~
编程几乎已经成为现代人的一门必修课,特别是 Python ,不仅长期霸占编程趋势榜.薪资榜第一,还屡屡进入小学教材,甚至成为浙江省信息技术高考项目-- 今天,小编带来了一门极度舒适的 Python 入 ...
- Python入门教程 超详细1小时学会Python
Python入门教程 超详细1小时学会Python 本文适合有经验的程序员尽快进入Python世界.特别地,如果你掌握Java和Javascript,不用1小时你就可以用Python快速流畅地写有用的 ...
- 毫无基础的人入门Python,Python入门教程
随着人工智能的发展,Python近两年也是大火,越来越多的人加入到Python学习大军,对于毫无基础的人该如何入门Python呢?这里整理了一些个人经验和Python入门教程供大家参考. 如果你是零基 ...
随机推荐
- 关于 tp5.0 阿里云 oss 上传文件操作
tp5.0 结合阿里云oss 上传文件 1.引入 oss 的空间( composer install 跑下第三方拓展包及核心代码包) 备注:本地测试无误,放到线上有问题 应该是移动后的路劲(相对于服 ...
- android中常用的优秀功能 (AsyncTask)
1.用好 AsyncTask 一个优秀的android app,肯定少不了一个很好的用户体验,除了界面等外,流畅的交互,快速响应的速度都是至关重要,若 是加载一个数据,都得等上几秒钟,怕是app卸载率 ...
- android Gui系统之SurfaceFlinger(1)---SurfaceFlinger概论【转】
转自:https://www.cnblogs.com/deman/p/5584198.html 阅读目录 1.OpenGL & OpenGL ES 2.Android的硬件接口HAL 3.An ...
- 巧用这19条MySQL优化【转】
1.EXPLAIN 做MySQL优化,我们要善用EXPLAIN查看SQL执行计划. 下面来个简单的示例,标注(1.2.3.4.5)我们要重点关注的数据: type列,连接类型.一个好的SQL语句至少要 ...
- CentOS6.5 上crontab每天自动备份mysql数据库
步骤: 1. sudo vi /etc/crontab #编辑crontab任务 2.输入01 12 * * * root /usr/local/mysql/backup/backup.sh > ...
- 数据库join union 区别
join 是两张表做交连后里面条件相同的部分记录产生一个记录集,union是产生的两个记录集(字段要一样的)并在一起,成为一个新的记录集. 1.JOIN和UNION区别 join 是两张表做交连后里 ...
- mysql alter add 使用记录
alter add命令用来增加表的字段. alter add命令格式:alter table 表名 add字段 类型 其他; 例如,在表MyClass中添加了一个字段passtest,类型为int(4 ...
- response.setContentType()的String参数及对应类型
response.addHeader("Content-Disposition", "attachment;filename="+ filename); res ...
- 获取ScrollView ListView的当前位置的百分比
找不到官方的API,就自己写了一下,下面是自己写的函数 --获取滚动层当前位置的百分比 function GetScrollViewPercent(scrollView) if scrollView ...
- 洛谷P4707 重返现世 [DP,min-max容斥]
传送门 前置知识 做这题前,您需要认识这个式子: \[ kthmax(S)=\sum_{\varnothing\neq T\subseteq S}{|T|-1\choose k-1} (-1)^{|T ...