从上一帧和光流创建帧

2024-04-24 19:42:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个视频,我需要用光流模拟帧;i、 e.具有表示下一帧的像素平移的帧和光流,以模拟该后续结果帧

我正在使用Python和OpenCV,如下所示:

  1. 在两个连续灰度帧之间生成流
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
flow = cv2.calcOpticalFlowFarneback(prev_gray, gray, None, pyr_scale = 0.5, levels = 5, winsize = 11, iterations = 5, poly_n = 5, poly_sigma = 1.1, flags = 0)

这是第一帧和第二帧之间的流:

First frame optical flow

这是以下(目标帧):

Original second frame

  1. 现在,我想使用第一帧和光流来生成第二帧估计。基于this question
height = flow.shape[0]
width = flow.shape[1]
R2 = np.dstack(np.meshgrid(np.arange(width), np.arange(height)))
pixel_map = R2 + flow
prev = original_frames[0].astype("float32")
pixel_map = pixel_map.astype("float32")
new_frame = cv2.remap(prev, pixel_map, None, cv2.INTER_LINEAR)

生成的图像是:

Resulting frame


Tags: nonemapnpwidthflowcv2framer2
1条回答
网友
1楼 · 发布于 2024-04-24 19:42:19

问题已得到解决,只需稍微更新代码,如下所示:

h = flow.shape[0]
w = flow.shape[1]
flow[:,:,0] += np.arange(w)
flow[:,:,1] += np.arange(h)[:,np.newaxis]

new_frame = cv2.remap(original_frame, flow, None, cv2.INTER_LINEAR)

相关问题 更多 >