Python 图像处理 OpenCV (1):入门
引言
又开一个新的系列分享,对图像处理感兴趣的同学可以关注这个系列。
更新频率尽量保持一周两到三次推送。
新系列第一件事儿当然是资源推荐,下面是一些有关 OpenCV 的资源链接:
资源链接:
- 官方网站:https://opencv.org/
- GitHub:https://github.com/opencv/opencv
- 官方文档:https://docs.opencv.org/
- 中文文档(非官方):http://www.woshicver.com/
- 官方 Demo :https://github.com/opencv/opencv/blob/master/samples/python
图书推荐
图书的话我就推荐一本吧,如果要看书学习绝对不能错过的「Learning OpenCV 3」,当然,是英文原版的,中文版的话翻译有点惨不忍睹,对英文阅读压力大的同学可以中英文对照着看:
安装
OpenCV 在 Python 中有两个类库,一个是 opencv-python
,另一个是 opencv-contrib-python
。
opencv-python
是只包含了主要模块的包,而 opencv-contrib-python
包含了主要模块以及一些扩展模块,带一些收费或者专利的算法,还有一些比较新的算法的高级版本。
安装的时候选择自己喜欢的版本装就好了,命令如下:
# opencv-python 安装命令
pip install opencv-python
# opencv-contrib-python
pip install opencv-contrib-python
安装完成后可以通过以下代码查看安装的版本信息:
import cv2 as cv
# 查看版本信息
print(cv.getVersionString())
# 输出结果
4.2.0
我这里的环境为:
- Python:3.7.4
- opencv-python:4.2.0
图像的基础知识
图像都是由像素( pixel )构成的,就像下面的这种小方格:
这些小方格每一个都有自己明确的位置和被分配的色彩值,而这些小方格的颜色和位置就决定了这个图像所呈现出来的样子。
像素是图像中最小的单位,每一个点阵图像包含了一定量的像素,这些像素决定图像在屏幕上所呈现的大小。
图像通常包括有 二值图像 、 灰度图像 和 彩色图像 。
二值图像
二值图像就是在图像中,任何一个点非黑即白,像素要么为 255 (白色) 要么为 0 (黑色) 。转换的时候一般将像素 >=127 的设置为白色,其余的设置为黑色。
灰度图像
灰度图像是除了黑白之外,还添加了第三种颜色:灰色,灰色把灰度划分为 256 个不同的亮度,例如纯白色,它的亮度级别是255。
图像转化为灰度图像有以下几种算法:
- 浮点算法:Gray = R * 0.3 + G * 0.59 + B * 0.11
- 整数方法:Gray = ( R * 30 + G * 59 + B * 11 ) / 100
- 移位方法:Gray = ( R * 76 + G * 151 + B * 28 ) >> 8
- 平均值法:Gray = ( R + G + B ) / 3
- 仅取绿色:Gray = G
- 加权平均值算法:R = G = B = R * 0.299 + G * 0.587 + B * 0.144
彩色图像
彩色图像是RGB图像,RGB表示红、绿、蓝三原色,计算机里所有颜色都是三原色不同比例组成的,即三色通道。
常用图像示例代码
上面这三种图像的示例代码如下:
import cv2 as cv
# 读取图像
img = cv.imread("maliao.jpg", cv.IMREAD_COLOR)
cv.imshow("read_img", img)
# 灰度图像
img_gray = cv.cvtColor(img, cv.COLOR_RGB2GRAY)
cv.imshow("gray_img",img_gray)
# 二值图像
ret, binary = cv.threshold(img_gray, 127, 255, cv.THRESH_BINARY)
cv.imshow("binary_img", binary)
cv.waitKey()
OpenCV 入门
1. 读入图像
读取图像是通过函数 cv.imread()
实现。
语法:
img = cv.imread(文件名,[,参数])
第二个参数是一个标志,它指定了读取图像的方式。
- cv.IMREAD_COLOR: 加载彩色图像,任何图像的透明度都会被忽视,如果不传参数,这个值是默认值。
- cv.IMREAD_GRAYSCALE:以灰度模式加载图像。
- cv.IMREAD_UNCHANGED:加载图像,包括alpha通道
注意:这三个标志可以简化为 1 、 0 、 -1 。
2. 显示图像
显示图像是通过函数 cv.imshow()
函数实现。
语法:
cv.imshow(窗口名, 图像名)
3. 窗口等待
显示图像是通过函数 cv.waitKey(delay)
函数实现。
语法:
cv.waitKey(delay)
cv.waitKey()
是一个键盘绑定函数。其参数是以毫秒为单位的时间。该函数等待任何键盘事件指定的毫秒。如果您在这段时间内按下任何键,程序将继续运行。如果 0 被传递,它将无限期地等待一次敲击键。
4. 删除窗口
调用函数如下:
cv.destroyAllWindows() 删除所有窗口
cv.destroyWindows() 删除指定的窗口
5. 写入图像
调用函数如下:
cv.imwrite(文件地址, 文件名)
代码示例
我们读取一张图片,将这张图片显示出来后,再将这张图片保存起来。
import cv2 as cv
# 读取图片
img = cv.imread("maliao.jpg", 1)
# 显示图片
cv.imshow("demo", img)
# 等待输入
cv.waitKey(0)
cv.destroyAllWindows()
# 图片写入
cv.imwrite("demo.jpg", img)
这里需要注意的是 cv.waitKey(0)
必须要加,如果不等待输入,整个窗体将会一闪而过。
示例代码
如果有需要获取源码的同学可以在公众号回复「OpenCV」进行获取。
参考
https://blog.csdn.net/Eastmount/article/details/81748802
Python 图像处理 OpenCV (1):入门的更多相关文章
- Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像
前文传送门: 「Python 图像处理 OpenCV (1):入门」 普通操作 1. 读取像素 读取像素可以通过行坐标和列坐标来进行访问,灰度图像直接返回灰度值,彩色图像则返回B.G.R三个分量. 需 ...
- Python 图像处理 OpenCV (3):图像属性、图像感兴趣 ROI 区域及通道处理
前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 图像属性 图像 ...
- Python 图像处理 OpenCV (4):图像算数运算以及修改颜色空间
前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...
- Python 图像处理 OpenCV (5):图像的几何变换
前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...
- Python 图像处理 OpenCV (6):图像的阈值处理
前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...
- Python 图像处理 OpenCV (7):图像平滑(滤波)处理
前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...
- Python 图像处理 OpenCV (9):图像处理形态学开运算、闭运算以及梯度运算
前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...
- Python 图像处理 OpenCV (10):图像处理形态学之顶帽运算与黑帽运算
前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...
- Python 图像处理 OpenCV (12): Roberts 算子、 Prewitt 算子、 Sobel 算子和 Laplacian 算子边缘检测技术
前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...
- Python 图像处理 OpenCV (13): Scharr 算子和 LOG 算子边缘检测技术
前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...
随机推荐
- orcale 树形结构查询
接到需求是要在一个表中(表结构为主键id和父id)循环显示数据,类似于省市县++这种情况 也可能不只有三级子菜单 id name parentid 1 a 0 2 ...
- 理解java容器底层原理--手动实现ArrayList
为了照顾初学者,我分几分版本发出来 版本一:基础版本 实现对象创建.元素添加.重新toString() 方法 package com.xzlf.collection; /** * 自定义一个Array ...
- audio的自动播放报错解决
使用audio标签时,当前页面没有进行交互时,比如用户刷新了页面后,play()调用就会报错,如下图 查找资料后,发现是2018年4月以后,chrome浏览器对这块进行了优化,为了节约流量,禁止了自动 ...
- C语言指定初始化器解析及其应用
指定初始化器的概念 C90 标准要求初始化程序中的元素以固定的顺序出现,与要初始化的数组或结构体中的元素顺序相同.但是在新标准 C99 中,增加了一个新的特性:指定初始化器.利用该特性可以初始化指定的 ...
- js前端加密,php后端解密(crypto-js,openssl_decrypt)
来源:https://blog.csdn.net/morninghapppy/article/details/79044026 案例:https://blog.csdn.net/zhihua_w/ar ...
- MySql --FIND_IN_SET() 函数 (转)
例子:https://www.jianshu.com/p/b2c1ba0ba34f 举个例子来说:有个文章表里面有个type字段,他存储的是文章类型,有 1头条,2推荐,3热点,4图文 .....11 ...
- 2019-2020-1 20199308《Linux内核原理与分析》第一周作业
Linux 基础入门(新版)学习笔记 实验二 基本概念及操作 重要快捷键 Tab 补全命令 Ctrl+c 强行终止当前命令 历史命令 方向上键↑,恢复之前输入过的命令 通配符 在命令行中获取帮助 某个 ...
- Spring Cloud 系列之 Stream 消息驱动(二)
本篇文章为系列文章,未读第一集的同学请猛戳这里:Spring Cloud 系列之 Stream 消息驱动(一) 本篇文章讲解 Stream 如何实现消息分组和消息分区. 消息分组 如果有多个消息消费者 ...
- "net.sf.hibernate.PropertyValueException"
2019独角兽企业重金招聘Python工程师标准>>> 如果你遇到了下面的错误信息,例如: ERROR [Importing data task] [confluence.impor ...
- JS点击按钮,提示确认后跳转网页,并可传递参数
综合参考: http://jingyan.baidu.com/article/47a29f242b180ac0142399f9.html http://blog.csdn.net/hshl1214/a ...