光流flo文件

1. 光流图像转numpy

最终的输出结果为二维图像,分别代表着图像上每一个像素点之间的x和y坐标像素的偏移量

import numpy as np

def load_flow_to_numpy(path):
    with open(path, 'rb') as f:
        magic = np.fromfile(f, np.float32, count=1)
        assert (202021.25 == magic), 'Magic number incorrect. Invalid .flo file'
        h = np.fromfile(f, np.int32, count=1)[0]
        w = np.fromfile(f, np.int32, count=1)[0]
        data = np.fromfile(f, np.float32, count=2 * w * h)
    data2D = np.resize(data, (w, h, 2))
    return data2D


if __name__ == '__main__':
    flo = load_flow_to_numpy('frame_0001.flo')
    print(flo.shape)  # (436, 1024, 2)

2. 光流图像转图像

import numpy as np
from matplotlib.colors import hsv_to_rgb
import matplotlib.pyplot as plt

def load_flow_to_numpy(path):
    with open(path, 'rb') as f:
        magic = np.fromfile(f, np.float32, count=1)
        assert (202021.25 == magic), 'Magic number incorrect. Invalid .flo file'
        h = np.fromfile(f, np.int32, count=1)[0]
        w = np.fromfile(f, np.int32, count=1)[0]
        data = np.fromfile(f, np.float32, count=2 * w * h)
    data2D = np.resize(data, (w, h, 2))
    return data2D


def load_flow_to_png(path):
    flow = load_flow_to_numpy(path)
    image = flow_to_image(flow)
    return image


def flow_to_image(flow, max_flow=256):
    if max_flow is not None:
        max_flow = max(max_flow, 1.)
    else:
        max_flow = np.max(flow)

    n = 8
    u, v = flow[:, :, 0], flow[:, :, 1]
    mag = np.sqrt(np.square(u) + np.square(v))
    angle = np.arctan2(v, u)
    im_h = np.mod(angle / (2 * np.pi) + 1, 1)
    im_s = np.clip(mag * n / max_flow, a_min=0, a_max=1)
    im_v = np.clip(n - im_s, a_min=0, a_max=1)
    im = hsv_to_rgb(np.stack([im_h, im_s, im_v], 2))
    return (im * 255).astype(np.uint8)


if __name__ == '__main__':
    image = load_flow_to_png('frame_0001.flo')
    plt.imshow(image)
    plt.show()

3、C++编译

1. 在http://vision.middlebury.edu/flow/submit/ 下载flow-code.zip

2. 解压到linux中flow-code文件夹下执行以下命令:

cd imageLib
make
cd ..
make
./colortest 10 colors.png *//如果有图片colors.png出现就为成功*

有可能会报错缺失'png.h',此时执行如下命令:

sudo apt-get install libpng-dev

3.转化自己图片:

单张图片转化

在flow-code 文件夹下执行并建立other文件夹放入out.flo文件:

./color_flow ./other/out.flo ./out.png

得到结果。

4.多张图片转化

生成的光流文件都会有很多个,用python写一个循环里不断执行转换程序
感谢下方评论区的提醒,需要先创建一个用来保存png图片的地址!!

Function: .flo file convert to .png file

import os

path = ‘自己的flo文件地址如(/root/userfolder/Flownet2/work/inference/run.epoch-0-flow-field/)’
png_path = ‘保存地址如(/root/userfolder/Flownet2/work/inference/flo2png/)’
length = len(os.listdir(path))
num = 0
while (num < length):
    ml = ‘./color_flow\t’ + path + str(num) + ‘.flo\t’ + png_path + str(num) + ‘.png’
    os.system(ml)
    num += 1

将你的光流文件按照1.flo,2.flo,……,n.flo的格式命名统一放在一个文件夹下。将程序中的flo_path和png_path改成自己的路径,运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值