cv2.calcOpticalFlowPyrLK例子
时间: 2023-07-24 17:26:32 浏览: 147
对python opencv 添加文字 cv2.putText 的各参数介绍
下面是一个使用 cv2.calcOpticalFlowPyrLK 函数实现光流追踪的例子:
``` python
import cv2
import numpy as np
# 读取两幅图像
frame1 = cv2.imread('frame1.jpg')
frame2 = cv2.imread('frame2.jpg')
# 定义特征点的位置
feature_params = dict(maxCorners=100, qualityLevel=0.3, minDistance=7, blockSize=7)
prev_pts = cv2.goodFeaturesToTrack(cv2.cvtColor(frame1, cv2.COLOR_BGR2GRAY), mask=None, **feature_params)
# 定义光流追踪参数
lk_params = dict(winSize=(15, 15), maxLevel=2, criteria=(cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 0.03))
# 计算光流
next_pts, status, error = cv2.calcOpticalFlowPyrLK(cv2.cvtColor(frame1, cv2.COLOR_BGR2GRAY), cv2.cvtColor(frame2, cv2.COLOR_BGR2GRAY), prev_pts, None, **lk_params)
# 选取跟踪成功的特征点
good_new = next_pts[status == 1]
good_old = prev_pts[status == 1]
# 绘制光流轨迹
for i, (new, old) in enumerate(zip(good_new, good_old)):
a, b = new.ravel()
c, d = old.ravel()
frame2 = cv2.circle(frame2, (a, b), 5, (0, 0, 255), -1)
frame2 = cv2.line(frame2, (a, b), (c, d), (0, 255, 0), 2)
# 显示结果
cv2.imshow("frame2", frame2)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
这个例子中,我们先读取了两幅图像 frame1 和 frame2,并使用 cv2.goodFeaturesToTrack 函数计算了在第一幅图像中的特征点 prev_pts。然后,我们定义了光流追踪的参数 lk_params,包括窗口大小、金字塔层数和迭代停止条件等。接着,我们调用 cv2.calcOpticalFlowPyrLK 函数计算了在第二幅图像中对应的特征点 next_pts,以及每个特征点的跟踪状态和误差估计。最后,我们选取跟踪成功的特征点 good_new 和 good_old,绘制它们的轨迹,最终显示结果。
阅读全文