Python + OpenCV 学习笔记(四)>>> 色彩空间

1. 不同色彩空间转换:

import cv2 as cv 


def color_space_demo(image):
        gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)     #将目标图像以BGR 转换成GRAY
        cv.imshow('gray',gray)
        hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)       #将目标图像以BGR 转换成HSV
        cv.imshow('hsv',hsv)
        yuv = cv.cvtColor(image, cv.COLOR_BGR2YUV)       #将目标图像以BGR 转换成YUV
        cv.imshow('yuv',yuv)
        Ycrcb = cv.cvtColor(image, cv.COLOR_BGR2YCrCb)   #将目标图像以BGR 转换成YCrCb
        cv.imshow('ycrcb',Ycrcb)
            

src = cv.imread("/home/pi/Desktop/apple.jpg")
color_space_demo(src)
cv.waitKey(0)

cv.destroyAllWindows()

Python + OpenCV 学习笔记(四)>>> 色彩空间

2. 颜色分割

值得注意的是:当图像转换为二值化图像之后,其通道变为单通道

视频颜色分割步骤:

首先导入视频
提取视频每一帧像素矩阵
将每一帧的色彩空间由BRG 转化为HSV
对中要分割的颜色取好上下限
分割

可通过下表对应颜色的数值过滤其他颜色
HSV 颜色对应RGB 的分量范围:
Python + OpenCV 学习笔记(四)>>> 色彩空间

def extrace_object_demo():
        capture = cv.VideoCapture('/home/pi/Desktop/my_video.mp4')
        while True:
                ret, frame = capture.read()
                if ret == False:
                        break
                hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
                lower_hsv = np.array([0, 43, 46])
                upper_hsv = np.array([10, 255, 255])
                mask = cv.inRange(hsv, lowerb=lower_hsv, upperb=upper_hsv)    #过滤红色
                #cv.imshow('video', frame)
                cv.imshow('mask', mask)
                c = cv.waitKey(40)
                if cv.waitKey(50) & 0xFF == ord('q'):
                        break


src = cv.imread("/home/pi/Desktop/apple.jpg")
extrace_object_demo()
cv.waitKey(0)

cv.destroyAllWindows()

该程序能将视频中的红色分割出来:
Python + OpenCV 学习笔记(四)>>> 色彩空间
原视频:
Python + OpenCV 学习笔记(四)>>> 色彩空间
原理:将摄像头采集图像每一帧截取下来,然后对每一帧图像的每一个像素点进行检测,当像素点介于给出范围内,即赋1;当不在范围内即赋0。再将新图像输出

3. 通道分离

b, g, r = cv.split(src)
cv.imshow('blue', b)
cv.imshow('green', g)
cv.imshow('red', r)

Python + OpenCV 学习笔记(四)>>> 色彩空间
视频也可以进行通道分离,其实质就是将每一帧的图像进行通道分离,再输出

4. 通道合并:

注意:三通道合并时只有按照原来分离的顺序进行合并才能得回原图。顺序不同,所得图像不同。

src = cv.merge([b, g, r])

也可合并两通道:

src = cv.merge([r, g, g])

无意间利用上面这code 合并出一张我极度喜欢????的色调
Python + OpenCV 学习笔记(四)>>> 色彩空间
视频也可以进行通道合并,其实质就是将每一帧的图像进行通道合并,再输出

5. 通道修改:

修改b g r 通道依次为0 1 2

src[:, :, 0] = 127

Python + OpenCV 学习笔记(四)>>> 色彩空间