Я пытаюсь прочитать файл .flo в виде изображения с двумя символами 2Channels.Чтение файлов middlebury 'flow' с помощью python (массив байтов и numpy)
Формат описан следующим образом:
".flo" file format used for optical flow evaluation
Stores 2-band float image for horizontal (u) and vertical (v) flow components.
Floats are stored in little-endian order.
A flow value is considered "unknown" if either |u| or |v| is greater than 1e9.
bytes contents
0-3 tag: "PIEH" in ASCII, which in little endian happens to be the float 202021.25
(just a sanity check that floats are represented correctly)
4-7 width as an integer
8-11 height as an integer
12-end data (width*height*2*4 bytes total)
the float values for u and v, interleaved, in row order, i.e.,
u[row0,col0], v[row0,col0], u[row0,col1], v[row0,col1], ...
(Отрывок из этого readme)
Вот мой код, но я вроде застрял, я не знаю, как читать файл как 2D-массив с двумя каналами.
import numpy as np
import os
# test.flo, 512*512 optical flow file
f = open('test.flo', 'rb')
f.seek(11, os.SEEK_SET) # skip header bytes
data_array = np.fromfile(f, np.float16)
data_2D = np.resize(data_array, (512, 512))
Возможно, кто-то знает, как это сделать?
хорошо, формат описан в файле README вы связаны, и образец кода C++ для чтения '.flo' файлов [здесь] (http://vision.middlebury.edu/flow/code/flow- code/flowIO.cpp) - подробнее см. функцию ReadFlowFile() '(строка 46). Перевод не должен быть слишком ужасным для кого-то с небольшим знанием C/C++ (к сожалению, это не я ...) – MattDMo
Кроме того, если вы загрузите ['flow-code-matlab.zip'] (http: //vision.middlebury.edu/flow/code/flow-code-matlab.zip), вы можете найти 'readFlowFile.m', который имеет тот же код в Matlab, если вы более свободно говорите об этом. – MattDMo
привет, спасибо за комментарии, я не так свободно владею C++ или mathlab, но я попробую. На самом деле я пытаюсь найти решение numpy, чтобы избежать стиля C++ для цикла, который будет довольно медленным в python. –