光流(Optical Flow)是计算机视觉中用于描述图像序列中像素运动的技术,velX
和velY
分别表示像素在水平和垂直方向上的运动速度(或位移)。以下是关于光流中velX
和velY
的完整解析:
velX
, velY
)。velX
和velY
:velX
:像素在水平方向(X轴)的运动速度(单位:像素/帧)。velY
:像素在垂直方向(Y轴)的运动速度。velX=5, velY=0
表示像素向右移动5个单位。velX
和velY
import cv2
import numpy as np
# 读取连续两帧图像
prev_frame = cv2.imread('frame1.jpg', cv2.IMREAD_GRAYSCALE)
next_frame = cv2.imread('frame2.jpg', cv2.IMREAD_GRAYSCALE)
# 检测角点(特征点)
prev_pts = cv2.goodFeaturesToTrack(prev_frame, maxCorners=100, qualityLevel=0.3, minDistance=7)
# 计算光流
next_pts, status, _ = cv2.calcOpticalFlowPyrLK(prev_frame, next_frame, prev_pts, None)
# 提取velX和velY
for i, (prev, next) in enumerate(zip(prev_pts, next_pts)):
velX = next[0][0] - prev[0][0] # 水平位移
velY = next[0][1] - prev[0][1] # 垂直位移
print(f"Point {i}: velX={velX:.2f}, velY={velY:.2f}")
flow = cv2.calcOpticalFlowFarneback(prev_frame, next_frame, None, 0.5, 3, 15, 3, 5, 1.2, 0)
velX = flow[..., 0] # 所有像素的velX矩阵
velY = flow[..., 1] # 所有像素的velY矩阵
velX/velY
消除摄像头抖动。velX/velY
。通过上述方法,您可以准确获取并应用光流中的velX
和velY
值。根据实际需求选择稀疏或稠密光流算法,并注意环境因素对结果的影响。