3.色彩空間

来源:https://www.cnblogs.com/AI-robort/archive/2020/07/25/13377830.html
-Advertisement-
Play Games

3.色彩空間 色彩空間¶ 下麵的圖的三個點表示的是RGB,當三個通道全是0時是黑色,全是255時是白色。 常見的色彩空間 1.色彩空間轉換的API¶ cv.cvtColor(圖片,cv.COLOR_BGR2+“色彩空間”) In [4]: import cv2 as cv def color_spa ...


3.色彩空間

 

色彩空間

下麵的圖的三個點表示的是RGB,當三個通道全是0時是黑色,全是255時是白色。

 

 

 

常見的色彩空間

 

 

 

1.色彩空間轉換的API

  • cv.cvtColor(圖片,cv.COLOR_BGR2+“色彩空間”)
In [4]:
import cv2 as cv

def color_space_demo(img):
    #灰度圖
    gray=cv.cvtColor(img,cv.COLOR_BGR2GRAY)
    cv.imshow("gray",gray)
    #hsv色彩空間轉換
    hsv=cv.cvtColor(img,cv.COLOR_BGR2HSV)
    cv.imshow("hsv",hsv)
    #yuv色彩空間轉換
    yuv=cv.cvtColor(img,cv.COLOR_BGR2YUV)
    cv.imshow("yuv",yuv)


print("---hello-----")
src=cv.imread("aaa.png",cv.WINDOW_AUTOSIZE)
cv.namedWindow("input img",0)
cv.imshow("input img",src)
color_space_demo(src)
cv.waitKey(0)
cv.destroyAllwindows()
 
---hello----- 
                

 

 

 

 

2.使用inRange

作用:可以過濾指定的顏色,通過指定三個通道的值的範圍

 

 

In [5]:
import cv2 as cv
import numpy as np
#通過HSV提取視頻中的相應顏色
def extrace_object():
    capture=cv.VideoCapture("./video.mp4")
    while True:
        ret,frame=capture.read()
        if ret==False:
            break
        
        hsv=cv.cvtColor(frame,cv.COLOR_BGR2HSV)
        lower_hsv=np.array([35,43,46])
        upper_hsv=np.array([77,255,255])
        mask=cv.inRange(hsv,lowerb=lower_hsv,upperb=upper_hsv)
        #顯示
        cv.imshow("video",frame)
       # cv.waitKey(100)
        #顯示篩選後的圖片,被選中的地方是白色,其他的是黑色
        cv.imshow("mask",mask)
        c=cv.waitKey(100)#延時100ms
        if c==27:
            #esc鍵退出
            break

            
extrace_object()
cv.waitKey(50)
cv.destroyAllwindows()

 

 

 輸出視頻如下:

 

 

3.通道的合併和分離

In [2]:
import cv2 as cv

print("---hello-----")
src=cv.imread("aaa.png",cv.WINDOW_AUTOSIZE)
x,y=src.shape[0:2]
print(src.shape)
cv.namedWindow("input img",0)
cv.imshow("input img",src)
#通道分離
b,g,r=cv.split(src)
#放縮
b=cv.resize(b,(x*3,y*3))
g=cv.resize(g,(x*3,y*3))
r=cv.resize(r,(x*3,y*3))

cv.imshow("blue",b)
cv.imshow("green",g)
cv.imshow("red",r)

#通道分離
src[:,:,1]=0#指定第2個通道全部為0
src=cv.merge([b,g,r])
cv.imshow("change image",src)

cv.waitKey(0)
cv.destroyAllWindows()
 
---hello-----
(96, 89, 3)
 

分離後:原圖和3個通道的圖

 

 

 

合併後:原圖和修改後的圖的區別