1. 初识 OpenCv
1999年,英特尔的 Gary Bradsky 发起了 OpenCv 项目,并于 2000 年发布第一个版本。2005年,OpenCv 被首次应用在 Stanley,这也是赢得同年 DARPA 大挑战赛的车型。如今,OpenCv 除了支持计算机视觉,还增加了众多机器学习相关算法,未来还将持续扩展。
OpenCV 支持众多主流编程语言,如:C++,Python,Java 等,可在不同的平台上使用,包括 Windows,Linux,OS X,Android 和 iOS。此外,基于 CUDA 的高速 GPU 运算接口,和 OpenCL 也在开发当中。
2. OpenCV-Python
本文介绍的是 OpenCv 的 Python 接口,即 OpenCV-Python
,但它并非 OpenCv 的 Python 实现,而仅仅是原生 OpenCv C++ 实现的 Python 包装,也就是说,我们可以像普通 Python 模块一样导入使用,但后台运行的依然是 C++ 程序,这样既发挥了 Python 的简单易用性,也充分利用了 C++ 的执行高效性,可谓两者兼得。
值得注意的是,OpenCv-Python 使用 numpy 进行数值运算,所有的 OpenCv(C++)的数组结构都在内部转换成 numpy 数组。当然,这也使得它更容易与其他使用 numpy 的库集成,如:Scipy 和 Matplotlib 。
3. 安装
pip install opencv-python
4. 功能概览
- GUI支持: 显示和保存图片和视频,控制鼠标事件和跟踪栏
- 核心运算:图片像素编辑,对图像执行算术运算,性能优化
- 图像处理:颜色空间变化,几何变换,图像阈值,平滑处理,渐变,边缘检测,融合,轮廓线,直方图,傅立叶变化,余弦变换,模版匹配,霍夫线变换,霍夫圆变换,图像分割,前景提取,
- 特征检测与描述:哈里斯角点检测,托马斯角点检测,SIFT,SURF,ORB,特征匹配,图像查找
- 视频分析:背景分割,目标追踪,
- 相机校准与三维重建:相机校准,姿态预测,极线几何,图像提取景深(3维重建)
- 机器学习:KNN(K 临近值),SVM(支持向量机), K-Means Clustering(K均值聚类)
- 计算机影像学:图像去噪,图像复原,HDR
- 目标检测:人脸识别
5. 基本操作
导入模块:
import cv2 as cv
5.1 图片打开, 显示, 保存
使用 cv.imread()
打开图片,返回的是一个 numpy 数组。
img = cv.imread('dog.jpeg')
print(type(img), img.shape)
<class 'numpy.ndarray'> (320, 320, 3)
上面得到是彩色图片的 numpy 数组,也可以直接得到灰度图片的 numpy 数组。
img_gray = cv.imread('dog.jpeg', 0)
print(type(img_gray), img_gra