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()

    总结:今天学到的知识点就写到这里了,收获很大,继续加油,坚持下去,看到不一样的自己。

posted on 2019-05-03 21:53  txp玩linux  阅读(2184)  评论(0编辑  收藏  举报