如何对图像施加光流?

时间:2019-10-01 15:52:30

标签: python numpy opencv scikit-image opticalflow

我从开放式CV应用了一个函数,以使两个图像之间具有光流。 这是两张图片,我想要它们的流程。

input-images

这是我用来提取光流的代码(摘自opencv doc)

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

raster = plt.imread(get_y_fn(fnames[0]))
raster_disp = plt.imread(get_disp_fn(fnames[0]))

prvs = cv2.cvtColor(raster, cv2.COLOR_BGR2GRAY)
next = cv2.cvtColor(raster_disp, cv2.COLOR_BGR2GRAY)

hsv = np.zeros_like(raster)
hsv[...,1] = 255

flow = cv2.calcOpticalFlowFarneback(prvs,next, None, 0.5, 3, 15, 3, 5, 1.2, 0)

mag, ang = cv2.cartToPolar(flow[...,0], flow[...,1])
hsv[...,0] = ang*180/np.pi/2
hsv[...,2] = cv2.normalize(mag,None,0,255,cv2.NORM_MINMAX)
rgb = cv2.cvtColor(hsv,cv2.COLOR_HSV2BGR)

rgb将此作为输出:

flow

我不明白几件事:

  • 首先,为什么flow的值不是整数,而是浮点数。 flow的唯一值是:

      

    array([-1.580338e-12, -1.544204e-12, -1.544158e-12, -1.524542e-12, ..., 1.641482e-12, 1.645247e-12, 1.659195e-12, 1.688041e-12], dtype=float32)

  • 然后如何应用我预测要从rasterraster_disp取回源图像(此处为flow)的流?

或者您对使用矩阵(或其他方法)有什么建议,可以使我从两张图片中获得“流”,并具有返回到源图片的功能?

谢谢!

0 个答案:

没有答案