HSV是一种将RGB色彩模型中的点在圆柱坐标系中的表示法。这种表示法试图做到比RGB基于笛卡尔坐标系的几何结构更加直观。HSV即色相、饱和度、明度(英语:Hue, Saturation, Value),又称HSB,其中B即英语:Brightness。[1]
在HSV颜色空间中,比在RGB颜色空间中更容易表示一种特定颜色,所以我们利用这一点可以更容易地提取带有某个特定颜色的物体。通过如下几步可以进行简单的物体跟踪
结果如下图所示:
图1 图2
图3
import numpy as np
import cv2
#cv2.cvtColor(input_image ,flag) #其中 flag就是转换类型。
#BGR↔Gray 的转换,我们要使用的 flag 就是 cv2.COLOR_BGR2GRAY。
#同样对于 BGR↔HSV 的转换,我们用的 flag 就是 cv2.COLOR_BGR2HSV。
#flags=[i for in dir(cv2) if i startswith('COLOR_')]
#print(flags) #通过这两行命令得到所有可用flag
#注意:在 OpenCV 的 HSV 格式中,H(色彩/色度)的取值范围是 [0,179],S(饱和度)的取值范围 [0,255],V(亮度)的取值范围 [0,255]。
# 但是不同的软件使用的值可能不同。所以当你需要拿 OpenCV 的 HSV 值与其他软件的 HSV 值进行对比时,一定要记得归一化。
#HSV 色彩/色度/色相[0,179] 饱和度[0,255] 亮度[0,255]
#物体追踪
cap=cv2.VideoCapture(0)
while(1):
#获取每一帧
ret,frame=cap.read()
#转换到HSV,HSV里面颜色区别更大
hsv=cv2.cvtColor(frame,cv2.COLOR_RGB2HSV)
#cv2.imshow('hsv',hsv)
#设定蓝色的阈值
lower_blue=np.array([11,43,46])
upper_blue=np.array([25,255,255])
#理论上蓝色H范围100-124,实际在11-25(橙)范围找到了蓝色物体,猜想是日光灯的原因。
#根据阈值构建掩模
mask=cv2.inRange(hsv,lower_blue,upper_blue)#保留阈值范围内,去除背景
#对原图像和掩模进行位运算
res=cv2.bitwise_and(frame,frame,mask=mask)#bitwise_and(src1, src2, dst=None, mask=None),矩阵1,矩阵2
#掩模 相当于PCB制版里面的 底片
#显示图像
cv2.imshow('frame',frame)
cv2.imshow('mask',mask)
cv2.imshow('res',res)
k=cv2.waitKey(5)&0xFF
if k ==27:
break
cv2.destroyAllWindows()
说明:参考文章HSV颜色识别-HSV基本颜色分量范围,确定蓝色的HSV区间,结果发现并不能检测出想要的结果,最后不断调整区间在色相区间[11,25]内有较好结果,还不知道是哪里不准确,怀疑是实验室的灯光的原因,有了解的朋友可以留言。
Reference:
[1] HSL和HSV色彩空间. (2018, March 12). Retrieved from 维基百科, 自由的百科全书: https://zh.wikipedia.org/w/index.php?title=HSL%E5%92%8CHSV%E8%89%B2%E5%BD%A9%E7%A9%BA%E9%97%B4&oldid=48639745
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有