光流算法:關于OpenCV讀寫middlebury網站給定的光流的代碼

jopen 8年前發布 | 36K 次閱讀 算法 OpenCV 圖形/圖像處理

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));
    }

}</pre>

光流算法:關于 OpenCV 讀寫 middlebury 網站的給定的光流的代碼

</div>

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

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

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!