介绍了什么是计算机视觉,OpenCV 给我们提供了哪些便利来处理图片以及其主要应用,最后介绍图像表示方式,以及如何安装
什么是计算机视觉
首先计算机视觉是一门学科,是一门研究如何使机器“看”的学科,那么什么是“看”呢。也就是观察周围环境来进行图像分类、进行目标识别、跟踪和测量等机器视觉任务。
计算机视觉作为一个科学学科,研究相关的理论和技术,试图建立能够从图像或者多维数据中获取'信息'的人工智能系统。
什么是 OpenCV
OpenCV的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉库。OpenCV是由英特尔公司发起并参与开发的,可以在商业和研究领域中免费使用。
- 跨平台
- 支持 C、C++ 和 python 等语言
- 开源项目
- 易于安装
OpenCV可用于开发实时的图像处理、计算机视觉以及模式识别。
计算机是如何表示图像
现在的计算机,一般使用 32 位来表示颜色,32 位平分给四个分量,也就是每个分量 8 位。那么红色 Red,绿色 Green,蓝色 Blue,每个都有 8 位的空间来表示,能表示的级别就有 2 的 8 次方也就是 256 可能。我们看到图像是一个平面,有宽和高,通过一个宽高位置可以表示一个像素位置,这个像素是有 R G B 和 A 通道也可以理解为深度,那么其实图像就是由 3 维矩阵所组成,这样表示图像其实比较简单粗暴,其实并不包含任何语义信息,所以无形中给计算机任务增加了困难。
安装 OpenCV
首先需要安装 python 环境,推荐安装 python 3.6 以上版本,然后运行下面命令即可
pip install opencv-python
推荐安装
推荐先安装 conda 环境,然后再在 conda 环境下安装 python 版本的 openCV 。
Opencv 读取图像
在 OpenCV 我们更多的操作矩阵(Matrix)来实现对图片的修改。其实我们看到图片都是一个像素按行和列组成的二维矩阵,每个像素又都包含 R、G 和 B 等通道来保存图片信息。
提到矩阵我们就不得不提及一下 Numpy 这个好用的 python 操作数组的库。所有 OpenCV 的数组结构的数据都可以转换为 Numpy 中提供数组结构。
读取图片
可以官方提供下载资源下载图片。
其实这张莱娜图片作为图像处理业界标准背后还是一定故事的,今天这个不是重点,选择这张图原因是在于,该图适度的混合了细节、平滑区域、阴影和纹理,从而能很好的测试各种图像处理算法。
cv2.imread('lena.jpg',0)
第一个参数传递要读取的图片,第二参数控制加载图片的模式
- cv2.IMREAD_COLOR (1) 表示加载图片保留颜色
- cv2.IMREAD_GRAYSCALE (0) 表示加载图片仅保留灰度
- cv2.IMREAD_UNCHANGED (-1) 加载图片保留透明等通道
img = cv2.imread('lena.jpg',0)
print(img)
[[163 162 161 ... 170 154 130]
[162 162 162 ... 173 155 126]
[162 162 163 ... 170 155 128]
...
[ 43 42 51 ... 103 101 99]
[ 41 42 55 ... 103 105 106]
[ 42 44 57 ... 102 106 109]]
当 imread 方法没有找到图片文件,会返回 None 来代替数组
openCV 读取图片
cv2.imshow('image',img)
cv2.waitKey(1)
cv2.destroyWindows()
刚刚只是以数组形式输出了图片,还可以使用 imshow 方法来在屏幕上将图片显示出来,不过仅用 imshow 图片会一闪而过,可以使用 waitKey 来添加让在用户点击按键前一直显示图片,方法参数 5000 表示如果用户不做操作在 5 秒后也会关闭图片窗口。
随后调用 destroyWindows 方法将资源所占内存进行释放,从而避免内存泄漏。
写入图片
cv2.imwrite('lena_copy.png',img)
利用 openCV 将图像写入到图片也比较简单,第一个参数给出图片路径和名称,第二个参数为图像数组。