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()
總結:今天學到的知識點就寫到這里了,收獲很大,繼續加油,堅持下去,看到不一樣的自己。