OpenCV的色彩空间
颜色空间
- RGB:人眼的色彩空间
- OpenCV默认使用BGR
- HSV
- Hue:色相,即色彩,如红色,蓝色(圆盘,度数不同颜色不同)
- Saturatuin:饱和度,颜色的纯度
- Value:明度
- HSB
- Hue
- Saturatuin
- Lightness
- HSL
- YUV
- YUV4:2:0
- YUV4:2:2
- YUV4:4:4
import cv2
def callback():
pass
cv2.namedWindow('color',cv2.WINDOW_NORMAL)
img = cv2.imread('2.jpg')
colorspaces = [cv2.COLOR_BGR2RGBA,cv2.COLOR_BGR2BGRA,cv2.COLOR_BGR2GRAY,
cv2.COLOR_BGR2HSV,cv2.COLOR_BGR2YUV]
cv2.createTrackbar('curcolor','color',0,len(colorspaces),callback)
while True :
index = cv2.getTrackbarPos('curcolor','color')
#颜色空间转换API
cvt_img = cv2.cvtColor(img,colorspaces[index])
cv2.imshow('color',cvt_img)
key = cv2.waitKey(10)
if key&0xFF == ord('q'):
break
cv2.destroyAllWindows()
Numpy库
-
OpenCV中用到的矩阵都要转换成Numpy数组
-
Numpy是一个经高度优化的Python数值库
-
创建矩阵:
- 创建数组array()
import numpy as np a = np.array([1,2,3]) print(a) b = np.array([[1,2,3],[4,5,6]]) print(b)
- 创建全0数组zeros()/ones
c = np.zeros((480,640,3),np.uint8) (480,640,3)(行的个数,列的个数,通道数/层数) np.uint8矩阵中的数据类型
- 创建全值数组full()
np.full((8,8),255,np.uint8)
- 创建单元数组identity/eye()
np.identity(4) 参数为4*4矩阵 斜对角为1,其余为0 c = np.eye(5,7,k=3) 5*7矩阵,从第k个开始斜对角为1,其余为0
-
检索与赋值[y,x]
[y,x,channel]y,x,通道数
-
获取子数组[:,:]
- ROI(Region of Image)
- [y1:y2,x1:x2]y1到y2,x1到x2的区域
roi = img[100:400,100:600] roi[:,:] = [0,0,255] roi[10:200,10:200] = [0,255,0]
Mat
class CV_EXPORTS Mat{
public:
...
int dims;//维数
int rows,clos;//行列数
uchar *data;//存储数据的指针
int *refcount;//引用计数
...
}
- Mat浅拷贝:共享header(默认)
Mat A
A = imread(file,IMREAD_COLOR)
Mat B(A)
- Mat深拷贝:两者分开
copy()
import cv2
import numpy as np
img = cv2.imread('1.png')
#浅拷贝
img2 = img
#深拷贝
img3 = img.copy()
img[10:100,10:100] = [0,0,255]
cv2.imshow('img',img)
cv2.imshow('img2',img2)
cv2.imshow('img3',img3)
cv2.waitKey(0)
- 访问mat的属性
shape中的三个信息:高度、长度、通道数
size 图像占用多大空间=高度*长度*通道数
dtype图像中每个元素的位深
通道的分离与合并
- split(mat)图像分割
- merge((ch1,ch2,…))通道合并
import cv2
import numpy as np
img = np.zeros((480,640,3),np.uint8)
b,g,r = cv2.split(img)
b[10:100,10:100] = 255
g[10:100,10:100] = 255
img2 = cv2.merge((b,g,r))
cv2.imshow('img',img)
cv2.imshow('b',b)
cv2.imshow('g',g)
cv2.imshow('img2',img2)
cv2.waitKey(0)