立体匹配:关于OpenCV读写middlebury网站的给定的视差的代码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了立体匹配:关于OpenCV读写middlebury网站的给定的视差的代码相关的知识,希望对你有一定的参考价值。
立体匹配:关于OpenCV读写middlebury网站的给定的视差的代码
Middlebury是每个研究立体匹配算法的人不可能不使用的网站,Middlebury提供了许多标准的测试库,这极大地推进了立体匹配算法的进展。Middlebury提供的标准库,其计算出的视差保存在后缀名为.pfm的文件中,Middlebury本身也提供了读取.pfm文件中C++源码和Matlab源码。尽管如此,将源码写成与OpenCV结合的形式是我们更期望的,以下我写的读写.pfm文件的源码。相对于Middlebury给定的源码,更简洁易懂。
#include "CCC/COMCV.h" #include <fstream> void writePFM(Mat_<float> &pfm, string path, float scale = - 1 / 255.0) { ofstream out("./../TestData/2.pfm", ios_base::binary); out << "Pf" << endl << pfm.cols << " " << pfm.rows << endl << scale << endl; for (int i = pfm.rows - 1; i >= 0; i--)//因为存储是从最后行开始存储的 for (int j = 0; j < pfm.cols; j++) out.write((const char*)(&pfm(i, j)), sizeof(float)); out.close(); } float readPFM(Mat_<float> &pfm, string path) { ifstream in(path, ios_base::binary); int cols; int rows; float scale; char tmp[10]; in.get(tmp, 10, ‘\n‘); in.get();//文件头 in.get(tmp, 10, ‘ ‘); in.get(); cols = atoi(tmp);//列数 in.get(tmp, 10, ‘\n‘); in.get(); rows = atoi(tmp); //行数 in.get(tmp, 10, ‘\n‘); in.get(); scale = atof(tmp);//缩放因子 pfm.create(rows, cols); for (int i = pfm.rows - 1; i >= 0; i--)//因为存储是从最后行开始存储的 for (int j = 0; j < pfm.cols; j++) in.read((char*)(&pfm(i, j)), sizeof(float)); in.close(); return scale; }
以上是关于立体匹配:关于OpenCV读写middlebury网站的给定的视差的代码的主要内容,如果未能解决你的问题,请参考以下文章
使用 OpenCV 描述符与 findFundamentalMat 匹配