标签:
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网站的给定的光流的代码
光流算法:关于OpenCV读写middlebury网站给定的光流的代码
标签:
原文地址:http://www.cnblogs.com/dzyBK/p/5140857.html