光流算法:關于OpenCV讀寫middlebury網站給定的光流的代碼
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> </span></span></span></span></span></span></span></span></span></span></span></span></span>
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!