OpenCV

概述

参考:

Open Source Computer Vision Library(开源计算机视觉库,简称 OpenCV) 是一个包含数百种计算机视觉算法的开源库。

各语言的库

官方提供了 Python、C++ 的 OpenCV 库

go https://github.com/hybridgroup/gocv

Modules(模块)

参考:

OpenCV 具有模块化的结构,整个 OpenCV 的功能由一个个模块提供,每个模块具有自己的类、函数、方法,并且可以多个模块共享使用。这种模块化的结构可以让 OpenCV 像一门编程语言一样,具有自己的标准库和第三方库,标准库中的标准模块可以实现自身的核心功能,第三方库的模块可以基于核心功能扩展其他功能。就像 https://pkg.go.dev/ 中的各种包,可以看到类型、方法、函数等等的描述。

所有 OpenCV 的类和函数都放在 cv Namespace 中(Namespace 是 C++ 编程语言的基本概念),如果我们要使用 C++ 代码调用 OpenCV 的模块,需要使用 cv:: 或在头部添加 using namespace cv; 指令。

模块分为两类:

  • Main Modules(主模块)
  • Extra Modules(额外模块)

Main Modules(主模块)

Extra Modules(额外模块)

核心功能模块

参考

Mat 类

Mat 类记录在 “核心功能模块 - 基本结构” 中。

当我们使用 OpenCV 打开一张图片时,就是实例化了一个 Mat 类,这个类的本质是一个 N-dimensional dense array class(N维密集数组类)。说白了就是将图像转为由纯数字表示的形式。任何对图像的处理,其实就是数学计算。

Mat 类可存储实数或复值向量和矩阵、灰度或彩色图像、体素体积、向量场、点云、张量、直方图(不过,非常高维的直方图可能更好地存储在 SparseMat 中)。

对于图像处理来说,实例化一个 Mat 对象,是一切的基础。

图像文件读写模块

imread() 函数

从文件中读取图像,返回一个 Mat 实例

imwrite() 函数

保存图像到指定的文件中。

Video I/O 模块

使用 OpenCV 读写视频或图像序列。

VideoCapture 类

用于从视频文件、图像序列或摄像头中捕获视频的类。当我们打开一个视频或一个捕获设备时,就是实例化一个 VideoCapture。

  • get() # 获取指定的 VideoCapture 属性

  • set() # 设置指定的 VideoCapture 属性

  • read() # 抓取、解码并返回下一个视频帧。

  • release() # 关闭视频文件或捕获设备(比如摄像头)

VideoWriter 类

视频写入器的类


最后修改 January 20, 2024: change notes name, bpf, kernel (01f0283c)