光流算法:关于OpenCV读写middlebury网站给定的光流的代码
jopen
9年前
Middlebury 是每个研究光流算法的人不可能不使用的网站, Middlebury 提供了许多标准的测试库,这极大地推进了光流算法的进展。 Middlebury 提供的标准库,其计算出的光流保存在后缀名为 .flo 的文件中, Middlebury 本身也提供了读取 .flo 文件中 C++ 源码和 Matlab 源码。尽管如此,将源码写成与 OpenCV 结合的形式是我们更期望的,以下我写的读写 .flo 文件的源码。相对于 Middlebury 给定的源码,更简洁易懂。
#include "CCC/COMCV.h" #include <fstream> void writeFlow(Mat_<Point2f> &flow, string outpath) { ofstream out(outpath, ios_base::binary); string tag = "PIEH";//文件标志 out.write(tag.c_str(), tag.size()); out.write((const char*)(&flow.cols), sizeof(int));//行数 out.write((const char*)(&flow.rows), sizeof(int));//列数 for (int i = 0; i < flow.rows; i++) for (int j = 0; j < flow.cols; j++) { out.write((const char*)(&flow(i, j).x), sizeof(float)); out.write((const char*)(&flow(i, j).y), sizeof(float)); } } void readFlow(Mat_<Point2f> &flow, string path) { ifstream in(path, ios_base::binary); string tag(4, '0');//文件标志 in.read((char*)tag.data(), 4); int rows, cols; in.read((char*)(&cols), sizeof(int));//行数 in.read((char*)(&rows), sizeof(int));//列数 flow.create(rows, cols); for (int i = 0; i < flow.rows; i++) for (int j = 0; j < flow.cols; j++) { in.read((char*)(&(flow(i, j).x)), sizeof(float)); in.read((char*)(&(flow(i, j).y)), sizeof(float)); } }
光流算法:关于 OpenCV 读写 middlebury 网站的给定的光流的代码