任务目标
- 物体跟踪
- 从视频中获取每一帧图像
- 图像转换为HSV空间
- 设置HSV阈值到蓝色范围
- 获取蓝色物体
在图像处理中使用较多的是 HSV 颜色空间,它比 RGB 更接近人们对彩色的感知经验。非常直观
地表达颜色的色调、鲜艳程度和明暗程度,方便进行颜色的对比。
cv2.inRange()
作用:设定边界值,超出边界像素值改为0
lower_blue:阈值的下界(小于这个值,图像像素值置为0)
upper_blue:阈值的上界(大于这个值,图像像素置为0)
bitwise_and(roi,roi ,mask=ma1)
按位“与”操作
为什么参数中有两个roi
首先,roi & roi 就是 roi 本身;然后,你可能会问roi和ma1大小一样、数据类型一样,为什么不直接cv2.bitwise_and(roi, ma1)呢?因为roi是彩色图像,三通道的,ma1是单通道,不能直接与。(具体内容参照【推荐】python openCV掩膜的通俗理解)
代码实现
import cv2
import numpy as np
cap=cv2.VideoCapture(0)
while(1):
# 获取每一帧
ret,frame=cap.read()
# 转换到 HSV
hsv=cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)
# 设定蓝色的阈值
lower_blue=np.array([110,50,50])
upper_blue=np.array([130,255,255])
# 根据阈值构建掩模
mask=cv2.inRange(hsv,lower_blue,upper_blue)
# 对原图像和掩模进行位运算
res=cv2.bitwise_and(frame,frame,mask=mask)
# 显示图像
cv2.imshow('frame',frame)
cv2.imshow('mask',mask)
cv2.imshow('res',res)
k=cv2.waitKey(5)&0xFF
if k==27:
break
# 关闭窗口
cv2.destroyAllWindows()
实验结果
参考
RGB、HSV和HSL颜色空间
图像阈值处理cv2.threshold()函数(python)
cv2.inRange函数
【推荐】python openCV掩膜的通俗理解