#include "XYZ.h"

 void readPFM(Mat_<float> &disp, float &scale, string path)
 {    //关于将Mat见我的另外一篇博客:
     ifstream in(path, ios_base::binary);

     int cols;
     int rows;
     ];
     , '\n'); in.get();//文件头
     , ' '); in.get(); cols = atoi(tmp);//列数
     , '\n'); in.get(); rows = atoi(tmp); //行数
     , '\n'); in.get(); scale = atof(tmp);//缩放因子

     disp.create(rows, cols);
     ; i >= ; i--)//因为存储是从最后行开始存储的
         ; j < disp.cols; j++)
             in.read((char*)(&disp(i, j)), sizeof(float));

     in.close();
 }

 void dyeDisp_core(Mat_<Vec3b> &colordisp, Mat_<float> &disp, float mindisp, float maxdisp)
 {
     float scale = 1.0 / (maxdisp - mindisp);
     ; i < disp.rows; i++)
         ; j < disp.cols; j++)
         {
             Vec3b *xxx = &colordisp(i, j);
             float x = disp(i, j);
             if ((x != INFINITY) && (x != -INFINITY))
             {
                 x = scale * (x - mindisp);
                 x = x / 1.15 + 0.1; // use slightly asymmetric range to avoid darkest shades of blue.
                 (*xxx)[] = __max(, __min(, ( * ( * fabs(x - .))))));
                 (*xxx)[] = __max(, __min(, ( * ( * fabs(x - .))))));
                 (*xxx)[] = __max(, __min(, ( * ( * fabs(x - .))))));
             }
             else
                 (*xxx) = Vec3b(, , );
         }
 }

 void dyeDisp_one(string dir)
 {
     string calibpath = dir + "/calib.txt";
     string disppath = dir + "/disp0GT.pfm";
     string colordisppath = dir + "/disp0GT.png";

     //1.读取极值视差
     ;
     ;
     ];
     float f;
     FILE *fp = fopen(calibpath.c_str(), "r");
     while (fgets(line, sizeof line, fp) != NULL)
     {
         ) dmin = f;
         ) dmax = f;
     }
     fclose(fp);

     //2.读取视差图像
     float scale;
     Mat_<float> disp;
     readPFM(disp, scale, disppath);
     //FileStorage fs(disppath, FileStorage::READ);
     //fs["mat"] >> disp;

     //3.计算彩色视差
     Mat_<Vec3b> colordisp(disp.rows, disp.cols);
     dyeDisp_core(colordisp, disp, dmin, dmax);

     //4.保存结果
     imwrite(colordisppath, colordisp);
 }

 void dyeDisp_dir()
 {
     vector<string> dirs = cv_GetListFolders("./../TestData");
     ; i < dirs.size(); i++)
         dyeDisp_one(dirs[i]);
 }

 void main()
 {
     dyeDisp_dir();
 }

立体匹配:关于用OpenCV彩色化middlebury网站给定的视差的更多相关文章

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

    Middlebury是每个研究光流算法的人不可能不使用的网站,Middlebury提供了许多标准的测试库,这极大地推进了光流算法的进展.Middlebury提供的标准库,其计算出的光流保存在后缀名为. ...

  2. 立体匹配:关于OpenCV读写middlebury网站的给定的视差并恢复三维场景的代码

    Middlebury是每个研究立体匹配算法的人不可能不使用的网站,Middlebury提供了许多标准的测试库,这极大地推进了立体匹配算法的进展.Middlebury提供的标准库,其计算出的视差保存在后 ...

  3. opencv 彩色图像分割(inrange)

    灰度图像大多通过算子寻找边缘和区域生长融合来分割图像. 彩色图像增加了色彩信息,可以通过不同的色彩值来分割图像,常用彩色空间HSV/HSI, RGB, LAB等都可以用于分割! 笔者主要介绍inran ...

  4. OpenCV定制化创建角点检测子

    定制化创建角点检测子 目标 在这个教程中我们将涉及: 使用 OpenCV 函数 cornerEigenValsAndVecs 来计算像素对应的本征值和本征向量来确定其是否是角点. 使用OpenCV 函 ...

  5. OpenCV阈值化处理

    图像的阈值化就是利用图像像素点分布规律,设定阈值进行像素点分割,进而得到图像的二值图像.图像阈值化操作有多种方法,常用方法有经典的OTSU.固定阈值.自适应阈值.双阈值及半阈值化操作.这里对各种阈值化 ...

  6. OpenCV灰度化图像

    OpenCV2版本号非常多函数发生了变化.比如二值化,其演示样例: void CmyMFC2Dlg::OnBnClickedButton1() { // TODO: Add your control ...

  7. opencv 彩色图像亮度、对比度调节 直方图均衡化

    直接上代码: #include <Windows.h> #include <iostream>// for stand I/O #include <string> ...

  8. Jenkins(9)- 汉化 Jenkins 网站

    如果想从头学起Jenkins的话,可以看看这一系列的文章哦 https://www.cnblogs.com/poloyy/category/1645399.html 下载插件 安装这两个插件,然后重启 ...

  9. OpenCV——阈值化

    上述五种结合CV_THRESH_OTSU(自适应阈值),写成:THRESH_BINARY | CV_THRESH_OTSU

随机推荐

  1. BCG界面库下的Windows8 UI界面样式www.webui8.com

    BCG界面库下的Windows8 UI界面样式(Metro风格)控件主要有以下一些功能: 规则的大块磁贴 支持完整键盘导航 Tile组 标题(Caption) 标题按钮(Caption buttons ...

  2. sqoop将关系型的数据库得数据导入到hbase中

    1.sqoop将关系数据库导入到hbase的参数说明

  3. 几款值得推荐的android(安卓)开源框架简介

    技术不再多,知道一些常用的.不错的就够了. 该文章自有需要的时候,mark一下. 顺序不代表排名,根据自己需求进行选择即可. 1.volley 项目地址 https://github.com/sman ...

  4. 收到远程通知,怎么区分是点击通知栏提醒进去的还是在foreground收到的通知?

    我现在是要区分点击通知栏的通知进入应用还是点击应用图标进入的,1,开始程序都是在后台.2,接受通知都是在foreground状态.applicationdidFinishLaunchWithOptio ...

  5. phalcon:跟踪sql语句

    在phalcon里有一个\Phalcon\Db\Profiler 类,这个类可以用来记录sql语句并计算消耗的时间.那么如何使用它呢? 手册里其实已经提供了方法,总结如下: 1.向$di里注册prof ...

  6. tf.slice可以用于矩阵也就是图片的切割

    第一个向量表示切割的起点,第二个向量表示矩形框的大小,-1表示取该元素的最大值

  7. 解析HTTP协议六种请求方法,get,head,put,delete,post有什么区别

    GET: 请求指定的页面信息,并返回实体主体.HEAD: 只请求页面的首部.POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体.PUT: 从客户端向服务器传送的数据取代指定的文档 ...

  8. 安装配置sock5代理

    环境准备及安装 yum -y install pam-devel openldap-devel cyrus-sasl-devel yum -y install openssl-devel.x86_64 ...

  9. 士兵站队问题sol

    作者:http://www.cnblogs.com/taoziwel/articles/1859577.html 相类似题目:输油管道问题 [问题描述] 在一个划分成网格的操场上,n个士兵散乱地站在网 ...

  10. 设计模式-UML类图的各符号含义(转)

    UML类图的各符号含义 类图基本符号可拆分为虚线,箭头,实线,空心右三角,实心右三角,空心菱形和实心菱形.由这些基本的图形进行组合构成了类图的基本符号.这里要注意这几个符号的顺序,代表了类与类之间关系 ...