OpenCV起步
OpenCV是开源计算机视觉库,它是一个开源计算机视觉和机器学习软件库,用于为计算机视觉专业人员提供灵活、功能强大的开发接口。OpenCV由C语言和C++实现,提供C++、Python、Java等多种编程语言接口,并支持Windows、Linux、MacOS、Android和IOS等平台。
1、Python环境安装
1.1 Python简介
Python由荷兰数学和计算机科学研究学会的吉多·范罗苏姆于1990年代初设计,然后在1991年初发布。Python是一种跨平台的解释型语言,它功能强大,简单易学,具有面向对象编程的功能。
Python是完全开源的软件,具有开放的特征,能很方便地将其他语言的类库封装为Python的模块来使用。由于Python语言的特点,以及其开源和开放的特性,吸引了编程社区为Python开发了很多实用且功能强大的包,这使得Python在科学计算、数据可视化、人工智能和Web编程等方面得到了广泛的应用。
1.2 Python安装
Python是一个完全开源的软件,从官网上可以下载最新版本的Python安装文件,这里以Python 3.8.1稳定版本为例。
虽然Python是跨平台的,但是安装软件不跨平台,安装时需要下载对平台的安装文件,我这里的示例是在64位windows 10平台上开发的,所以下载64位Windows平台平台安装文件,如图1.1所示。
图1.1 Python安装文件
Python的安装过程与一般的Windows程序安装过程一样,首先双击“python-3.8.1-amd64.exe”安装文件,然后跟着安装向导完成安装过程。
在安装过程中需要勾选“Add Python 3.8 to PATH”选项,届时会自动将Python添加到Windows系统的环境变量PATH中,这样就可以在Windows的任何路径下使用Python相关工具。
安装过程中,如果想要重新指定新的安装路径,可以点击“Customize installation”进行定制安装,然后根据需求自定义安装即可。
1.3 PyCharm安装
PyCharm是一种Python IDE(Integrated Development Environment,集成开发环境),带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试、语法高亮、项目管理、代码跳转、智能提示、自动完成、单元测试、版本控制。
PyCharm是由JetBrains打造的一款Python IDE工具,它有成熟的企业版本(Professional Edition),还有免费的社区版本(Community Edition),这里使用社区版本即可。
1.4 OpenCV安装
OpenCV是一个基于Apache2.0许可发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。
OpenCV用C++语言编写,它具有C++、Python、Java等接口,安装方式如下。
pip install opencv-python==3.4.11.45
需要注意,安装默认的opencv-ptyhon为最新版本(4.x版本),该版本没有提供智能提示。
2、OpenCV入门案例
以下例子是为OpenCV入门例子,用于打开指定图片,并显示出来。
import cv2 as cv
# 第一步:读取指定路径的图像文件,返回numpy.ndarray对象
img = cv.imread("img/cb.jpg")
# 第二步:显示图像,其中test为窗口名,建议使用英文(中文乱码)
cv.imshow("test", img)
# 等待时间(单位:毫秒),0表示任意键终止
cv.waitKey(0)
# 销毁所有窗口
cv.destroyAllWindows()
注意,在imshow()函数中使用中文创建窗口名,会出现乱码现象,原因是imshow()函数的窗口标题是GBK编码,而Python3默认UTF-8编码,因此编码集不一致,而帮出现乱码。目前暂没有完全解决方案,建议使用英文命名。
3、计算机眼中的图像
在计算机眼中,所有的图像都是由一个个的元像点组成,像素点是由0-255之间的数值组成,它表示该点的亮度,0为最黑,255为最高,如图3.1所示。
图3.1 图像组成
一张彩色图片就是一个矩阵,每个像素点由BGR值组成,BGR表示3个通道,其中B表示蓝色通道,G表示绿色通道,R表示红色通道,值范围为0-255。
灰度图片也是一个矩阵,每个像素点只有一个通道,值范围为0-255,此值表示该点的高度,0为最暗,255为最亮。
查看图片的像素值代码示例如下。
import cv2 as cv
# 读取图片
img = cv.imread("img/cb.jpg")
# 显示图像,可创建多个窗口
cv.imshow("test", img)
# 测试:将获取到的图像像素值存储到本地
f = "E:/tmp/img/test.txt"
count = 0
with open(file=f, mode="w", encoding="utf8") as a:
for i in img:
count = count + 1
# 获取每一行每个像素点的BGR值
a.write(f"\n\n第{count}行\n")
a.write(str(i))
# 等待时间(单位:毫秒),0表示任意键终止
cv.waitKey(0)
# 销毁所有窗口
cv.destroyAllWindows()