色彩空間的轉換


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

    總結:今天學到的知識點就寫到這里了,收獲很大,繼續加油,堅持下去,看到不一樣的自己。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM