opencv 简易入门概述
常用模块介绍
- core 模块 —— 核心库,数据结构和基本运算
- highgui 模块 —— IO库,视频和图像的读入和显示
- imgproc 模块 —— 插件库,和图像有关的大部分都有,比如滤波器、图像变换之类的
- opencv_contrib —— 试用的功能
- training_toolbox_tensorflow —— 再训练 open_model_zoo 中的模型
- feature2d —— 2d特征框架
其余模块相对小众,用时查询一下即可;
数据类型
1,基础数据类型type,。type可以是CV_8UC1,CV_16SC1,…,
CV_64FC4 等。里面的 8U 表示 8 位无符号整数,16S 表示 16 位有符号整数,64F
表示 64 位浮点数(即 double 类型);C 后面的数表示通道数,例如 C1 表示一个
通道的图像,C4 表示 4 个通道的图像,以此类推。
如果你需要更多的通道数,需要用宏 CV_8UC(n),例如:
Mat M(3,2, CV_8UC(5));//创建行数为 3,列数为 2,通道数为 5 的图像
2,在引入 core 模块后,我们可以使用下面的数据类型描述数据,其中最重要、最常用的是 Mat:
Mat 是 OpenCV 中用来表示图像的多维数组,类似 tensorflow 和 pytorch 中的 tensor。
Mat src = imread(filepath);
3,其余Range,Vec, Size, Point, Rect 和其他库或者语言里面的意思近似,查查文档就明了。
基本操作
这里简单介绍三个主要模块提供的功能,这些功能完成了图像的输入、处理和输出。复杂的模块可以看作 imgproc 的拓展,封装了更为复杂的图像处理内容。
在引入 highgui 模块后,我们可以进行图像、视频的 IO 操作:
// 读入图像
Mat image = imread("file path");
// 创建窗口
namedWindow("window name", WINDOW_AUTOSIZE);
// 显示图像
imshow("window name", image);
// 保存图像
imwrite("file path", image);
// 销毁窗口
destroyAllWindows()
// 等待按键,0代表无限等待
waitKey(0)
core 模块为数据类型提供了加减乘除等基本操作:
Mat image_1 = ...
Mat image_2 = ...
Mat image_3 = (image_1 + image2) * 3
imgproc 模块提供了一些更复杂的图像变换操作:
// 将图像 image 转为灰度图赋值给 result
cvtColor(image, result, COLOR_BGR2GRAY);
// 将图像 image 翻转赋给 result
flip(image, result, 0);
// 将 image 缩放为 size 的大小并赋值给 result
resize(image, result, Size(...),0,0,INTER_LINEAR);
神经网络
能看神经网络 ,基本上有TF,Keras, Caffe 等主流框架的使用经验,就不在这里BB了。
图像存储
1,一般来说,灰度图用 2 维矩阵表示,彩色(多通道)图像用 3 维矩阵(M
× N × 3)表示。对于图像显示来说,目前大部分设备都是用无符号 8 位整
数(类型为 CV_8U)表示像素亮度。
2,图像数据在计算机内存中的存储顺序为以图像最左上点(也可能是最左下
点)开始,
3,在 OpenCV 中,RGB 图像的通道顺序为 BGR ,