一、色彩空间
- RGB:人眼的色彩空间
- OpenCV默认使用的是BGR
- HSV/HSB/HSL
- YUV 用于视频领域
rgb,bgr用于显示器,硬件中
二、HSV
用于OpenCV中
- Hue:色相,即色彩,如红色,蓝色
- Saturation:饱和度,颜色的纯度
- Value:明度
三、HSL
四、YUV
用于视频
五、色彩转换
1 | import cv2 |
六、Numpy
- OpenCV中用到的矩阵都要转换成Numpy数组
- Numpy是一个经高度优化的Python数值库
基础操作
- 创建矩阵
- 检索与赋值[y, x]
- 获取子数组[:, :]
6.1、创建矩阵
创建数组 array()
a = np.array([2, 3, 4]) # 一维 c = np.array([[1.0, 2.0], [3.0, 4.0]]) # 二维
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
- 创建全0/全1数组 zeros()/ ones
- ```python
# 高 宽
# 行的个数, 列的个数, 通道数/层数
# np.uint8 矩阵中的数据类型
# opencv中是8*8的3个
c = np.zeros((8, 8, 3), np.uint8)
print(c)
# 定义ones矩阵,默认1个通道
d = np.ones((8, 8, 3), np.uint8)
print(d)
创建全值数组 full()
# 定义full矩阵 e = np.full((8, 8), 255, np.uint8) print(e)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
- 创建单元数组 identity/eye()
- ```python
# 定义单位矩阵identity
# 斜对角为1,其他为0
f = np.identity(4)
print(f)
# 结果
[[1. 0. 0. 0.]
[0. 1. 0. 0.]
[0. 0. 1. 0.]
[0. 0. 0. 1.]]# 定义eye矩阵 g = np.eye(5, 7, k = 3) print(g) # 5*7矩阵 # k = 3,代表从3开始。0, 1, 2, 3,也就是第4个 [[0. 0. 0. 1. 0. 0. 0.] [0. 0. 0. 0. 1. 0. 0.] [0. 0. 0. 0. 0. 1. 0.] [0. 0. 0. 0. 0. 0. 1.] [0. 0. 0. 0. 0. 0. 0.]]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
## 6.2、检索与赋值[y, x]
- `[y, x]`
- 索引从0开始
- `[y, x, channel]`
- channel通道
```python
import numpy as np
import cv2
# 设置一个640*480,三层的图片,使用BGR,里面的内容都为0
img = np.zeros((480, 640, 3), np.uint8)
# 检索图片中的某个值
print(img[100, 100])
count = 0
while count < 200:
#BGR 分三层,以下是两种写法
img[count, 100, 0] = 255
# img[count, 100] = [0, 0, 255]
count = count + 1
cv2.imshow('img', img)
while True:
key = cv2.waitKey(0)
if (key & 0xFF == ord('q')):
cv2.destroyAllWindows()
break
只在第一层设为255,BGR中B为255,蓝色
6.3、获取子矩阵
[y1:y2,x1,x2]
:y1到y2,x1到x2这个矩形[:,:]
:代表全部像素点
1 | # 子矩阵 |
七、Mat
头部存放类型等
Mat拷贝
默认使用浅拷贝
浅拷贝
1 | Mat A |
深拷贝
1 | # 默认的两个API |
例子
1 | import cv2 |
八、图像的多种属性
1 | import cv2 |
输出结果:
1 | (300, 400, 3) |
九、通道分离与合并
1 | import cv2 |