读取raw格式数据,OpenCV显示

此篇博客介绍了如何使用C++和OpenCV解析raw格式的深度图数据,通过将2字节转换为10进制表示深度,并应用色彩映射,展示了数据读取、处理和显示的过程。
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显示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值