camshift算法的应用

import numpy as np
import matplotlib.pyplot as plt
import cv2 as cv

plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正确显示中文


#camshift
'''
在meanshift算法中检测窗口的大小是固定的,而物体在移动的过程中,如果是由近及远或者
由远及近的移动,那么固定的窗口就不合适了.所以我们需要根据目标的大小和角度来对窗口
的大小和角度进行修正

camshaft算法的全称是"Continuously Adaptive Mean-Shift"(连续自适应meanshift算法),
是对meanshift算法的改进,可随着跟踪目标的大小变化实时调整搜索窗口的大小,具有较好的跟踪效果.

camshaft算法首先应用meanshift,一旦meanshift收敛,它就会更新窗口的大小,还计算最佳拟合
椭圆的方向,从而根据目标的位置和大小更新搜索窗口


camshaft在OpenCV中实现时,只需要将上述的meanshift函数改为camshaft函数即可

'''

#创建视频读取对象
cap=cv.VideoCapture()
cap.open('video/skip2.mp4')

#获取第一帧图像并指定目标的位置
ret,frame=cap.read()
if ret:
    r, h, c, w = 190, 45, 410, 25
    win=(c,r,w,h)

    #指定感兴趣的区域
    roi=frame[r:r+h,c:c+w]
    cv.rectangle(frame,(c,r),(c+w,r+h),(0,255,0),2)
    cv.imshow('w',frame)
    cv.waitKey()


    #将目标区域转成HSV格式
    roi_hsv=cv.cvtColor(roi,cv.COLOR_BGR2HSV)
    #计算直方图
    mask = cv.inRange(roi_hsv, np.array((0., 60., 32.)), np.array((180., 255., 255.)))  # 将低亮度的值忽略掉
    roi_hist=cv.calcHist([roi_hsv],[0],mask,[180],[0,180])
    #归一化
    cv.normalize(roi_hist,roi_hist,0,255,cv.NORM_MINMAX)

    #目标追踪
    #设置终止条件
    term=(cv.TERM_CRITERIA_EPS | cv.TERM_CRITERIA_COUNT,10,1)

    while True:
        #获取每一帧图像
        ret,frame=cap.read()
        if ret:
            #图像转成hsv格式
            frame_hsv=cv.cvtColor(frame,cv.COLOR_BGR2HSV)
            #计算直方图的反向投影
            dst=cv.calcBackProject([frame_hsv],[0],roi_hist,[0,180],1)
            #进行camshift跟踪
            ret,win=cv.CamShift(dst,win,term)
            # ret,win=cv.meanShift(dst,win,term)
            #将追踪的位置绘制在图像上
            print(ret)
            pts=cv.boxPoints(ret)
            pts=np.int0(pts)
            cv.polylines(frame,[pts],True,255,2)
            cv.imshow('frame',frame)

            keyword=cv.waitKey(25)
            if keyword==113: #按q键退出
                break
        else:
            break

更多内容更新与个人博客:camshift算法的应用

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值