将二进制深度图转换成OpenCV的Mat格式

来源:互联网 发布:linux内核编译 编辑:程序博客网 时间:2024/05/29 10:14
  • 日常在使用深度相机(Xtion之类)时,有时没有OpenCV的环境,就会把数据保存成16位的二进制dat文件,但是之后我们的处理一般都是在OpenCV里面的,这时就需要将二进制深度图转换成Mat格式,下面这段例子就实现了这个功能。
#include <iostream>#include <string>#include <fstream>#include <opencv2/opencv.hpp>#include <QFileDialog>using namespace std;using namespace cv;int main(){    //-- Open Depth File    //-- 这里用Qt选择二进制深度图文件路径    QString fileName = QFileDialog::getOpenFileName(this, tr("Open Next Map"), "./",  tr("DepthImageFile(*.dat)"));    // 深度图为16位无符号数,单通道图像    Mat depth(480, 640, CV_16UC1);    //传入string的指针类型    FILE *fp = fopen(fileName.toStdString().c_str(), "rb");    if( fp == NULL) {        cout << "not open" << endl;        return;    }    char *pdata = (char*) depth.data;    //-- 16位深度图,每个数据占两个字节    //-- 这里读取的是640*480分辨率的深度图    cout << fread(pdata, 2, 640*480, fp) << endl;    fclose(fp);    return;}