引言

又开一个新的系列分享,对图像处理感兴趣的同学可以关注这个系列。

更新频率尽量保持一周两到三次推送。

新系列第一件事儿当然是资源推荐,下面是一些有关 OpenCV 的资源链接:

资源链接

图书推荐

图书的话我就推荐一本吧,如果要看书学习绝对不能错过的「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

http://woshicver.com/

Python 图像处理 OpenCV (1):入门的更多相关文章

  1. Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像

    前文传送门: 「Python 图像处理 OpenCV (1):入门」 普通操作 1. 读取像素 读取像素可以通过行坐标和列坐标来进行访问,灰度图像直接返回灰度值,彩色图像则返回B.G.R三个分量. 需 ...

  2. Python 图像处理 OpenCV (3):图像属性、图像感兴趣 ROI 区域及通道处理

    前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 图像属性 图像 ...

  3. Python 图像处理 OpenCV (4):图像算数运算以及修改颜色空间

    前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...

  4. Python 图像处理 OpenCV (5):图像的几何变换

    前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...

  5. Python 图像处理 OpenCV (6):图像的阈值处理

    前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...

  6. Python 图像处理 OpenCV (7):图像平滑(滤波)处理

    前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...

  7. Python 图像处理 OpenCV (9):图像处理形态学开运算、闭运算以及梯度运算

    前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...

  8. Python 图像处理 OpenCV (10):图像处理形态学之顶帽运算与黑帽运算

    前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...

  9. Python 图像处理 OpenCV (12): Roberts 算子、 Prewitt 算子、 Sobel 算子和 Laplacian 算子边缘检测技术

    前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...

  10. Python 图像处理 OpenCV (13): Scharr 算子和 LOG 算子边缘检测技术

    前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...

随机推荐

  1. kubernetes的无状态服务和有状态服务介绍

    无状态服务 1)是指该服务运行的实例不会在本地存储需要持久化的数据,并且多个实例对于同一个请求响应的结果是完全一致的 2)多个实例可以共享相同的持久化数据.例如: nginx实例和tomcat实例 3 ...

  2. 十分钟搞懂Elasticsearch数字搜索原理

    更多精彩内容请看我的个人博客或者扫描二维码,关注微信公众号:佛西先森 前言 Elasticsearch诞生的本意是为了解决文本搜索太慢的问题,ES会默认将所有的输入内容当作字符串来理解,对于字段类型是 ...

  3. 学习web前端的免费12个学习网站,等你来撩

    我相信很多人刚喜欢web前端或者刚刚接触web前端的时候,都不愿意去花钱去培训或者买资料去学习,因为不知道自己会不会学好,或者只是一时脑热,所以就选择免费的去学习基础.编程学习 很多人包括一些企业家, ...

  4. 可以用 Python 编程语言做哪些神奇好玩的事情?除了生孩子不能,其他全都行!

    坦克大战 源自于一个用Python写各种小游戏的github合集,star数1k.除了坦克大战外,还包含滑雪者.皮卡丘GOGO.贪吃蛇.推箱子.拼图等游戏. 图片转铅笔画 帮助你快速生成属于自己的铅笔 ...

  5. cocos2dx新建项目

    首先你得下载好cococs2dx,还有python2.x版本,还有vs2017 然后cmd在你Cocos2dx的路径下输入 python setup.py 然后你就回车回车回车 然后重新打开cmd 这 ...

  6. 企业云桌面-03-安装第1个企业 CA-013-CA01

    作者:学 无 止 境 QQ交流群:454544014 注意: <企业云桌面>系列博文是<企业云桌面规划.部署与运维实践指南>的基础部分,因为书中内容涉及非常多,非常全面,所以基 ...

  7. LightOJ 1287 Where to Run(期望)

    题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1287 题意:给定一个n个点的无向图(0到n-1),你开始在0.你开始遍历这个图 ...

  8. 前线观察 | AWS re:Invent 2018见闻实录

    作为云计算行业科技盛会,AWS:reInvent大会近年来越来越受关注,其中尤其被关注的分别是CEO Andy Jassy和CTO Werner Vogels的Keynote演讲.2018年11月28 ...

  9. 15个 MySQL 基础面试题,DBA 们准备好了吗?

    此前我们已经有发表过Linux 面试基础问答之一.二和三共3篇文章,获得读者的好评,同时我们得到反馈,有些读者希望这种交互式学习方法能够做得更加灵活.心动不如行动,我们这就为您奉上 15个 MySQL ...

  10. TreeMap分析(中)

    通过上篇文章,大家已经能够理解红黑树的基础数据结构,那么这篇文章就来分析下,在红黑树中插入一个结点后,内部数据结构发生了哪些变化. TreeMap插入某个结点的源码分析 /** * 插入节点,并平衡红 ...