Python+OpenCV学习(15)---Lucas Kanade 角点光流轨迹跟踪
2015-09-16 17:01
706 查看
利用python学习OpenCV,个人感觉比较方便。函数的形式与C++基本相同,所以切换过来还是比较好的,对于像我这种对python不太熟练的人,使用python的集成开发环境PyCharm进行学习,可以设置断点调试,有助于我这类初学者理解掌握。
Lucas Kanade 光流法是进行视频中角点的轨迹跟踪的算法,该算法可以用来进行人体肢体动作的轨迹跟踪,获取轨迹数据后可以通过模式识别的手段进行动作识别,完成一些比较智能的任务。
下面是利用python语言结合OpenCV进行Lucas Kanade光流跟踪的代码:
下面是角点光流跟踪的轨迹图:
Lucas Kanade 光流法是进行视频中角点的轨迹跟踪的算法,该算法可以用来进行人体肢体动作的轨迹跟踪,获取轨迹数据后可以通过模式识别的手段进行动作识别,完成一些比较智能的任务。
下面是利用python语言结合OpenCV进行Lucas Kanade光流跟踪的代码:
# -*- coding:utf-8 -*- __author__ = 'Microcosm' import cv2 import numpy as np cap = cv2.VideoCapture("E:/python/Python Project/opencv_showimage/videos/visionface.avi") # 设置 ShiTomasi 角点检测的参数 feature_params = dict( maxCorners=100, qualityLevel=0.3, minDistance=7, blockSize=7 ) # 设置 lucas kanade 光流场的参数 # maxLevel 为使用图像金字塔的层数 lk_params = dict( winSize=(15,15), maxLevel=2, criteria=(cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 0.03)) # 产生随机的颜色值 color = np.random.randint(0,255,(100,3)) # 获取第一帧,并寻找其中的角点 ret, old_frame = cap.read() old_gray = cv2.cvtColor(old_frame, cv2.COLOR_BGR2GRAY) p0 = cv2.goodFeaturesToTrack(old_gray, mask=None, **feature_params) # 创建一个掩膜为了后面绘制角点的光流轨迹 mask = np.zeros_like(old_frame) while(1): ret, frame = cap.read() if ret: frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 计算能够获取到的角点的新位置 p1, st, err = cv2.calcOpticalFlowPyrLK(old_gray, frame_gray, p0, None, **lk_params) # 选取好的角点,并筛选出旧的角点对应的新的角点 good_new = p1[st == 1] good_old = p0[st == 1] # 绘制角点的轨迹 for i,(new,old) in enumerate(zip(good_new,good_old)): a,b = new.ravel() c,d = old.ravel() cv2.line(mask, (a,b), (c,d), color[i].tolist(), 2) cv2.circle(frame, (a,b), 5, color[i].tolist(), -1) img = cv2.add(frame, mask) cv2.imshow("frame", img) k = cv2.waitKey(30) & 0xff if k == 27: break # 更新当前帧和当前角点的位置 old_gray = frame_gray.copy() p0 = good_new.reshape(-1,1,2) else: break cv2.destroyAllWindows() cap.release()
下面是角点光流跟踪的轨迹图:
相关文章推荐
- 【D2】Python一周入门
- Python 进行RSA私钥加密,公钥解密
- 升级Python导致yum报错
- python pexpect 启动、与子进程交互的例子--logstash
- Myeclipse + Python2.7.9,搭建Python开发环境
- Python改回之前版本的方法
- python:PyInstaller打包发布单个文件错误struct.error: argument for 's' must be a string解决
- 浅析python 中__name__ = '__main__' 的作用
- python知识点总结
- python上机题:黑色星期五
- JAVA读写Python脚本
- python指定时间运行函数
- python数值工厂函数和功能函数
- [python] 0x5 Python Tutorial: Web Requests
- python torndb模块
- python守护进程编写
- [python] 0x4 Python Tutorial: Python to EXE
- python 类属性 实例属性 类方法 实例方法 静态方法(转载)
- python日积月累之maketrans
- 使用python迭代器生成斐波那契数列