生活随笔
收集整理的這篇文章主要介紹了
四、色彩空间
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、色彩空間
1、什么是色彩空間?
色彩空間是定義的顏色范圍。
2、常見的色彩空間有哪些?
①RGB
②HSV
在OpenCV中,Hue的值為0~180°,之所以不是360°是因為,8位存不下,故進行歸一化操作,使得Hue取值在0 ~180°,可以通過一個字節來存儲。
③HIS
Hue:色調
Intensity:強度
Saturation :飽和度
④YCrCb
主要在早期的人的皮膚檢測方面應用
⑤YUV
Android開發中常用,Linux的色彩空間
3、色彩空間之間的相互轉化
import cv2
def color_space(image
):gray
= cv2
.cvtColor
(image
,cv2
.COLOR_BGR2GRAY
)cv2
.imshow
("gray",gray
)hsv
= cv2
.cvtColor
(image
,cv2
.COLOR_BGR2HSV
)cv2
.imshow
("hsv",hsv
)yuv
= cv2
.cvtColor
(image
,cv2
.COLOR_BGR2YUV
)cv2
.imshow
("yuv",yuv
)ycrcb
= cv2
.cvtColor
(image
,cv2
.COLOR_BGR2YCrCb
)cv2
.imshow
("ycrcb",ycrcb
)src
= cv2
.imread
("G:/Juptyer_workspace/study/opencv/opencv3/cat.png")
cv2
.namedWindow
("input image",cv2
.WINDOW_AUTOSIZE
)
cv2
.imshow
("input image",src
)
t1
= cv2
.getTickCount
()
color_space
(src
)
t2
= cv2
.getTickCount
()
time
= (t2
-t1
)/cv2
.getTickFrequency
()
print("time:%s ms"%(time
*1000))
cv2
.waitKey
(0)cv2
.destroyAllWindows
()
運行效果圖如下:
二、對視頻中的目標(青色水杯)進行跟蹤
cv2.inRange(hsv,lowerb=lower,upperb=upper):對HSV顏色過濾,lowerb和upperb需要查上面的表進行顏色轉換
方法一:目標物體白色,其余黑色
import cv2
import numpy
as np
def extrace_object():capture
= cv2
.VideoCapture
("G:/Juptyer_workspace/study/data/yy.mp4")while(True):ret
,frame
= capture
.read
()if ret
==False:breakhsv
= cv2
.cvtColor
(frame
,cv2
.COLOR_BGR2HSV
)lower
= np
.array
([78,43,46])upper
= np
.array
([99,255,255])mask
= cv2
.inRange
(hsv
,lowerb
=lower
,upperb
=upper
)cv2
.imshow
("video",frame
)cv2
.imshow
("mask",mask
)c
= cv2
.waitKey
(40)if c
==27:breakt1
= cv2
.getTickCount
()
extrace_object
()
t2
= cv2
.getTickCount
()
time
= (t2
-t1
)/cv2
.getTickFrequency
()
print("time:%s ms"%(time
*1000))
cv2
.waitKey
(0)cv2
.destroyAllWindows
()
效果圖如下:
方法二:目標物體顏色保留,其余黑色
import cv2
import numpy
as np
def extrace_object():capture
= cv2
.VideoCapture
("G:/Juptyer_workspace/study/data/yy.mp4")while(True):ret
,frame
= capture
.read
()if ret
==False:breakhsv
= cv2
.cvtColor
(frame
,cv2
.COLOR_BGR2HSV
)lower
= np
.array
([78,43,46])upper
= np
.array
([99,255,255])mask
= cv2
.inRange
(hsv
,lowerb
=lower
,upperb
=upper
)dst
= cv2
.bitwise_and
(frame
,frame
,mask
=mask
)cv2
.imshow
("video",frame
)cv2
.imshow
("dst",dst
)c
= cv2
.waitKey
(40)if c
==27:breakt1
= cv2
.getTickCount
()
extrace_object
()
t2
= cv2
.getTickCount
()
time
= (t2
-t1
)/cv2
.getTickFrequency
()
print("time:%s ms"%(time
*1000))
cv2
.waitKey
(0)cv2
.destroyAllWindows
()
效果圖如下:
三、對彩色圖像三顏色通道進行分割顯示并合并顯示
cv2.split(src):對src三顏色通道的彩色圖像進行分割
cv2.merge([b,g,r]):將b,g,r三個單顏色通道圖像進行合并
import cv2
import numpy
as npsrc
= cv2
.imread
("G:/Juptyer_workspace/study/opencv/opencv3/cat.png")
cv2
.namedWindow
("input image",cv2
.WINDOW_AUTOSIZE
)
cv2
.imshow
("input image",src
)
t1
= cv2
.getTickCount
()b
,g
,r
= cv2
.split
(src
)
cv2
.imshow
("blue",b
)
cv2
.imshow
("green",g
)
cv2
.imshow
("red",r
)src
= cv2
.merge
([b
,g
,r
])
src
[:,:,0]=0
cv2
.imshow
("changed",src
)t2
= cv2
.getTickCount
()
time
= (t2
-t1
)/cv2
.getTickFrequency
()
print("time:%s ms"%(time
*1000))
cv2
.waitKey
(0)cv2
.destroyAllWindows
()
效果圖如下:
總結
以上是生活随笔為你收集整理的四、色彩空间的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。