光流算法:关于OpenCV读写middlebury网站给定的光流的代码

jopen 8年前

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 网站的给定的光流的代码

来自: http://www.cnblogs.com/dzyBK/p/5140857.html

</span></span></span></span></span></span></span></span></span></span></span></span></span>