【OpenCV学习】(三)色彩及矩阵操作
背景
之前主要介绍了数据的读取和展示操作,本篇将开始介绍数据的简单处理操作;
一、颜色空间转换
1、介绍一些常见的颜色空间
RGB:人眼的色彩空间;
BGR:OpenCV默认使用的色彩空间;
HSV的说明:
- Hue:色相,即色彩如红色、绿色;
- Saturation:饱和度,颜色的纯度;
- Value:明亮度;
2、转换色彩空间
cvtColor(原始数据,变换格式);
变换格式有很多种,例如:COLOR_BGR2RGB、COLOR_BGR2BGRA等;
代码案例:
cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
二、Numpy基本操作
Numpy使用原因:
1、OpenCV中用到的矩阵都要转换成Numpy数组;
2、Numpy是一个经过高度优化的Python数值库;
相信大家对于Numpy都比较熟悉,这里主要来回顾一下:
1、创建矩阵
- 创建数组:array()
- 创建全0数组:zeros()/ ones()
- 创建全值数组:full()
- 创建单位矩阵:identity()/ eye()
2、Numpy的检索
需要注意的是,我们访问img[y,x]的时候,第一个元素代表竖轴,第二个元素代表横轴;
如果想要给一个像素点中的某个通道赋值,也可以如下:
img[100, 100] = [0, 0, 255] # B,G,R分别赋值
3、获取子矩阵(ROI)
举个例子,得到图像的一个ROI区域:
img = cv2.imread('test2.jpg')
roi = img[100:400, 200:400, :]
当然不只有这一种用法,还有很多的使用方式,在实际工程中可以多尝试;
三、Mat
定义:从Python角度来说Mat就是一个矩阵,也是R、G、B的组合;
Mat属性
Mat拷贝
Mat的拷贝形式有两种:浅拷贝与深拷贝;
浅拷贝示意图:
代码实现:
A = cv2.imread("test.jpg")
B = A
特点:改变B的数据,A也会发生改变;
深拷贝代码实现:
A = cv2.imread("test.jpg")
B = A.copy()
特点:不会改变原来Mat的数据,是将Data数据拷贝一份;
图像属性
- img.shape:图像的高度、长度和通道数;
- img.size:图像占用空间大小(高度 x 长度 x 通道数);
通道的分离与合并
使用API:
- split(mat):分离通道;
- merge((ch1,ch2,ch3)):合并通道;
代码案例:
b, g, r = cv2.split(img)
img2 = cv2.merge((b, g, r))
总结
本篇讲的比较基础,主要是介绍一些基础知识,对于了解图像和Mat的可以直接跳过本篇学习;下一篇将讲解图像的绘制,这样是为之后的项目做一个铺垫;