读取raw格式数据,OpenCV显示

  • Post author:
  • Post category:其他


void read_raw()
{
	int w = 640;//原始图像的高
	int h = 480;//原始图像的宽

	FILE* fp = NULL; //定义指针s
	fp = fopen("F:\\Image\\test_depth\\dist_1200mm\\depth_640x480_18376_0243.raw", "rb+");
    
    Mat src;
    src.create(Size(w, h), CV_16UC1);
    fread(src.data, sizeof(unsigned short), h * w, fp);//将文件读入src

    // 将2Byte的数据合成为一个byte的数据
    Mat origin = src;
    vector<vector<int>> data;
    for (int i = 0; i < h; ++i)
    {
        vector<int> sub;
        for (int j = 0; j < w; ++j)
        {
            int sum = (int)origin.at<uchar>(i, 2 * j) + (int)origin.at<uchar>(i, 2 * j + 1) * 256;
            sub.push_back(sum);
        }
        data.push_back(sub);
    }


    normalize(src, src, 0, 255, NORM_MINMAX);//将src中0~65535缩放到0~255
    src.convertTo(src, CV_8UC1);//将src改为8位,用来显示

    // 转为彩色图
    Mat color;
    applyColorMap(src, color, cv::COLORMAP_JET);

    imshow("原图", src);
    imshow("彩色图", color);

    waitKey(0);
}

raw格式数据保存的是深度图,2Byte的0~255的数据表示一个深度,因此需要把有2Byte组成的16进制数转换成10进制即为深度。16进制的数范围为[0, 65535],转化到[0, 255]即可用OpenCV显示。



版权声明:本文为lfc2017原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。