OpenCV(3)-OpenCV的色彩空间

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)

你可能感兴趣的:(opencv,numpy,python)