视频的每一帧就是一张图片,跟踪视频中的某一对象,分解下来,其实就是在每一帧的图片中找到那个对象。
既然要找到那个对象,就要先定义这个目标对象,既然是图片,那就有颜色,先了解下常用的 3 种颜色模型。
以上三个模型,使用 HSV 定义一个目标对象更为方便。
OpenCV 可以很方便的从 BGR 转换为灰度图,从 BGR 转换为 HSV:
import cv2 as cv
cv.cvtColor(input_image, cv.COLOR_BGR2GRAY)
cv.cvtColor(input_image, cv.COLOR_BGR2HSV)
现在我们知道如何将 BGR 图像转换为 HSV,我们可以使用它来提取彩色对象。在 HSV 中,表示颜色比在 BGR 颜色空间中更容易。
接下来,我们将在视频中追踪蓝色对象。
步骤:
下面是详细注释的代码:
import cv2 as cv
import numpy as np
# 从默认的摄像头读取视频
cap = cv.VideoCapture(0)
while True:
# 获取视频的每一帧
_, frame = cap.read()
# BGR 转换为 HSV
hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
# 用 HSV 定义目标对象的颜色范围。
lower_blue = np.array([110,50,50])
upper_blue = np.array([130,255,255])
# 生成一个 HSV 遮罩只获取蓝色对象。
mask = cv.inRange(hsv, lower_blue, upper_blue)
#应用
res = cv.bitwise_and(frame,frame, mask= mask)
cv.imshow('frame',frame)
cv.imshow('mask',mask)
cv.imshow('res',res)
k = cv.waitKey(5) & 0xFF
if k == 27:
break
cv.destroyAllWindows()
效果图如下,可以看到有一点噪音,单后面有技术可以消除。