opencv学习笔记及复习(四)物体追踪及人体肤色追踪

一、BGR颜色空间

在opencv中,硬件所使用的颜色顺序为BGR,而非RGB,虽然排序有所不同,但是在进行图像操作的时候会有很大的区别,BGR颜色空间分别对应蓝、绿、红;这三种颜色的排列组合可以组成人眼所看到的所有颜色,如图2.1:

 

二、HSV颜色空间

HSV分别对应色度、饱和度、亮度,HSV颜色空间数据分明,适合计算机处理数据,HSV是一种比较直观的颜色模型,所以在许多图像编辑工具中应用比较广泛。因此,一般在做图像处理的时候,都会把BGR转化成HSV[3]。其表示如图2.2:

        

 三、API:cv.cvtColor  色彩空间转化API

第一个参数frame是图片数据,第二个参数为转化参数有

cv.COLOR_BGR2GRAY:BGR转灰色空间,就是灰白图片
cv.COLOR_BGR2HSV:BGR转HSV
cv.COLOR_BGR2YUV :BGR转YUV色彩空间

这些参数中把其中颜色空间的顺序调换就可以转回BGR,如cv.COLOR_GRAY2BGR

hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)

四、颜色追踪(物体追踪)

1.定义掩摸(面具)mask

HSV颜色取值范围表

绿

hmin

0

0

0

0

156

11

26

35

78

100

hmax

180

180

180

10

180

25

34

77

99

124

smin

0

0

0

43

43

43

43

43

43

43

smax

255

43

30

255

255

255

255

255

255

255

vmin

0

46

221

46

46

46

46

46

46

46

vmax

46

220

255

255

255

255

255

255

255

255

mask = cv.inRange(hsv, lowerb = lower_hsv, upperb = upper_hsv) 

 cv.inRange:确定颜色取值的范围(下面是红色的HSV颜色范围取值)

lower_hsv = np.array([156, 43, 46])   #定义hsv空间的三个最低值
upper_hsv = np.array([180, 255, 255]) #定义hsv空间的三个最高值
cv.bitwise_and:逻辑与,就是把他里面所有的参数都相与
cv.bitwise_and(frame, frame, mask=mask)

之后调用摄像头只直接显示就可以了,完整代码如下

def extrace_object_demo():
    capture = cv.VideoCapture(0)
    while(True):
        ret, frame = capture.read()
        if ret == False:
            break
        hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
        lower_hsv = np.array([156, 43, 46])   #定义hsv空间的三个最低值
        upper_hsv = np.array([180, 255, 255]) #定义hsv空间的三个最高值
        mask = cv.inRange(hsv, lowerb = lower_hsv, upperb = upper_hsv)       #inRange取颜色范围,,现取红色区域
        cv.imshow("video", hsv)       #显示hsv图像
        red_mask = cv.bitwise_and(frame, frame, mask=mask)         #使用逻辑与取出红色区域
        cv.imshow("new video", red_mask)  #显示图像中的红色区域
        c = cv.waitKey(40)
        if c == 27:
            break
extrace_object_demo()
cv.waitKey(0)
cv.destroyAllWindows()

 实验结果(我这里不使用摄像头了,我网上找了一个穿红衣服跳舞的视频)

视频我放在根目录下,只是把摄像头0改成了视频路径,更改的代码

capture = cv.VideoCapture('3.mkv')

 五、肤色追踪(人脸检测)

黄色人体肤色范围

lower_red=np.array([0,30,60])

 upper_red=np.array([20,150,255])

然后把这些数值带入上面的代码就可以了

实验结果就不放出来了,人长得丑,自己实验就知道了。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenCV提供了多种物体追踪器,用于在视频中跟踪物体的位置。这些追踪器包括BOOSTING、MIL、KCF、CSRT、MedianFlow、TLD、MOSSE和GOTURN等。BOOSTING Tracker是基于机器学习算法的,但是它的速度较慢且效果不佳。MIL Tracker比BOOSTING Tracker更准确,但在处理失败情况方面表现较差。KCF Tracker是一种内核化相关滤波器,比BOOSTING和MIL Tracker更快,但不能很好地处理完全遮挡的情况。CSRT Tracker使用判别相关滤波器,通常比KCF Tracker更准确,但速度稍慢。MedianFlow Tracker在处理失败方面表现较好,但对于快速移动或外观变化较大的物体可能会失败。TLD Tracker容易产生误报,因此不推荐使用。MOSSE Tracker非常快速,但准确性不如CSRT或KCF Tracker。GOTURN Tracker是唯一基于深度学习的目标检测器,它需要额外的模型文件才能运行。 根据不同的OpenCV版本,我们可以使用不同的方法来创建物体追踪器。如果使用的是OpenCV 3.2或更早的版本,可以使用特殊的工厂函数来创建追踪器。如果使用的是OpenCV 3.3或更新的版本,需要显式调用相应的物体追踪器构造函数。可以使用一个字典来映射命令行参数字符串到相应的物体追踪器函数,从而获取适当的物体追踪器实例。 要开始物体追踪,首先需要初始化要追踪物体的边界框坐标。然后,使用适当的物体追踪器对象进行追踪。还可以从视频中获取帧,并根据需要进行处理。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [OpenCV 对象跟踪](https://blog.csdn.net/hhhhhhhhhhwwwwwwwwww/article/details/122815739)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值