一、颜色空间转换
BGR,即蓝-绿-红色彩空间,每一个像素点都由一个三元数组来表示,分别代表蓝、绿、红三种颜色。另一个与之相似的颜色空间:RGB,它们只是在颜色的顺序上不同。
RGB[A]准换成灰度:Y=0.299R+0.587G+0.114*B
灰度转换为RGB[A]:R=Y,G=Y,B=Y,A=max(ChannelRange)
该空间广泛用于视频和图像压缩,不能算作纯粹的色彩空间,它是RGB颜色空间的一种解码方式Y通道表示亮度,而Cr和Cb表示红色差值(在RGB空间中R通道和Y的差值)和蓝色差值(在RGB空间中B通道和Y的差值)各自的色度分量。
HSV, H(Hue)是色调,S(Saturation)是饱和度,V(Value)表示黑暗的程度(或光谱的另一端的明亮程度)。
物体跟踪:
从视频中获取每一帧图像
将图像转换到 HSV 空间
设置 HSV 阈值到蓝色范围。
获取蓝色物体,当然我们还可以做其他任何我们想做的事
import cv2
import numpy as np
cap = cv2.VideoCapture(0)
ret = cap.set(3, 640)
ret = cap.set(4, 480)
#定蓝色的阈值
lower = np.array([110, 50, 50])
upper = np.array([130, 255, 255])
#黄色-乒乓球
#lower = np.array([20, 90, 90])
#upper = np.array([30, 255, 255])
while cap.isOpened():
# 获取每一帧
ret, frame = cap.read()
if not ret:
print('获取相机图像失败')
break
# 换到 HSV
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
# 根据阈值构建掩模
mask = cv2.inRange(hsv, lower, upper)
# mask = cv2.inRange(hsv, lower_black, upper_black)
# 对原图像和掩模位运算
res = cv2.bitwise_and(frame, frame, mask=mask)
# 显示图像
cv2.imshow('frame', frame)
cv2.moveWindow('frame', x=0, y=0)