1、 今天我们来学习一下色彩空间转换,那么什么是色彩空间呢(可以看百度上的解释:https://baike.baidu.com/item/%E8%89%B2%E5%BD%A9%E7%A9%BA%E9%97%B4/4615427?fr=aladdin)
我们常见色彩空间有: RGB HSV HIS Ycrcb YUV
1 import cv2 as cv 2 import numpy as np 3 4 5 def color_space(image): 6 gray=cv.cvtColor(image,cv.COLOR_BGR2GRAY) #色彩转为GRAY 7 cv.imshow("gray",gray) 8 HSV=cv.cvtColor(image,cv.COLOR_BGR2HSV) # 色彩转为HSV 9 cv.imshow('hsv',HSV) 10 YUV=cv.cvtColor(image,cv.COLOR_BGR2YUV) #色彩转为YUV 11 cv.imshow('yuv',YUV) 12 13 src = cv.imread('D:/hh.JPG') 14 cv.namedWindow("ago",cv.WINDOW_AUTOSIZE) 15 cv.imshow("ago", src) 16 color_space(src) 17 cv.waitKey(-1) 18 cv.destoryAllWindows()
实现效果如下:
HSV色彩通道说明:
H:0--180
S: 0--255
V: 0---255
2、利用inRange()实现过滤掉视频中的颜色,实现只对某一颜色追踪,在之前我们来看一下HSV颜色对应RGB的分量范围;
1 import cv2 as cv 2 import numpy as np 3 4 5 def capture_video(): 6 capture = cv.VideoCapture('D:/tt.avi') 7 while True: 8 ret ,frame=capture.read() 9 if not ret: 10 break 11 HSV=cv.cvtColor(frame,cv.COLOR_BGR2HSV) #把色彩空间转为HSV 12 lower_hsv=np.array([37,43,461]) #设置颜色的最低值,这里是根据上面那张HSV颜色以RGB为分量的颜色范围,这里使用numpy 的矩阵运算功能 13 upper_hsv=np.array([77,255,255]) #设置颜色的最高值,也是根据那张表选择的 14 mask=cv.inRange(HSV,lower_hsv,upper_hsv) #调节图像颜色信息(H) 、饱和度(S)、亮度(V)区间,选择白色区域 15 cv.imshow('video',frame) 16 cv.imshow('mask',mask) 17 c = cv.waitKey(50) 18 if c == 27 : 19 break 20 t1=cv.getTickCount() 21 22 capture_video() 23 24 t2=cv.getTickCount() 25 26 print('the time is : %s ms'%((t2-t1)/cv.getTickFrequency()*1000)) 27 28 cv.waitKey(-1) 29 cv.destoryAllWindows()
实现效果如下(我这里选择的视频不好,没有白色区域,全是黑色的,hh):
3、通道的分离与合并:
首先是通道的分离:
30 import cv2 as cv 31 import numpy as np 32 33 src=cv.imread('D:/hh.JPG') 34 cv.namedWindow('ago',0) 35 cv.imshow('ago',src) 36 #进行通道分离,输出三个单通道图片 37 b,g,r=cv.split(src) #利用函数split()将色彩图像分割成3个通道 38 cv.imshow('blue',b) 39 cv.imshow('green',g) 40 cv.imshow('red',r) 41 42 43 44 cv.waitKey(-1) 45 cv.destoryAllWindows()
效果如下(我们可以看到通道分离成功,有三个通道,分别是:blue ,green,red):
接下来是通道的合并:
1 import cv2 as cv 2 import numpy as np 3 4 src=cv.imread('D:/hh.JPG') 5 cv.namedWindow('ago',0) 6 cv.imshow('ago',src) 7 #进行通道分离,输出三个单通道图片 8 b,g,r=cv.split(src) #利用函数split()将色彩图像分割成3个通道 9 cv.imshow('blue',b) 10 cv.imshow('green',g) 11 cv.imshow('red',r) 12 13 #进行通道的合并 14 src=cv.merge([b,g,r])# 利用函数merge()实现通道的合并 15 cv.imshow('together',src) 16 17 18 cv.waitKey(-1) 19 cv.destoryAllWindows()
效果如下:
最后实现单个通道颜色值得修改:
1 import cv2 as cv 2 import numpy as np 3 4 src=cv.imread('D:/hh.JPG') 5 cv.namedWindow('ago',0) 6 cv.imshow('ago',src) 7 #进行通道分离,输出三个单通道图片 8 b,g,r=cv.split(src) #利用函数split()将色彩图像分割成3个通道 9 cv.imshow('blue',b) 10 cv.imshow('green',g) 11 cv.imshow('red',r) 12 13 #进行通道的合并 14 src=cv.merge([b,g,r])# 利用函数merge()实现通道的合并 15 cv.imshow('together',src) 16 17 #是可以实现修改某个通道的值 18 src[:,:,2]=100 #这里是修改了第三个通道的值,也就是red 这通道 19 cv.imshow('alone',src) 20 21 cv.waitKey(-1) 22 cv.destoryAllWindows()
总结:今天学到的知识点就写到这里了,收获很大,继续加油,坚持下去,看到不一样的自己。