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()
2. 颜色分割
值得注意的是:当图像转换为二值化图像之后,其通道变为单通道
视频颜色分割步骤:
可通过下表对应颜色的数值过滤其他颜色
HSV 颜色对应RGB 的分量范围:
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()
该程序能将视频中的红色分割出来:
原视频:
原理:将摄像头采集图像每一帧截取下来,然后对每一帧图像的每一个像素点进行检测,当像素点介于给出范围内,即赋1;当不在范围内即赋0。再将新图像输出
3. 通道分离
b, g, r = cv.split(src)
cv.imshow('blue', b)
cv.imshow('green', g)
cv.imshow('red', r)
视频也可以进行通道分离,其实质就是将每一帧的图像进行通道分离,再输出
4. 通道合并:
注意:三通道合并时只有按照原来分离的顺序进行合并才能得回原图。顺序不同,所得图像不同。
src = cv.merge([b, g, r])
也可合并两通道:
src = cv.merge([r, g, g])
无意间利用上面这code 合并出一张我极度喜欢????的色调↓
视频也可以进行通道合并,其实质就是将每一帧的图像进行通道合并,再输出
5. 通道修改:
修改b g r 通道依次为0 1 2
src[:, :, 0] = 127