读取raw格式数据,OpenCV显示

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显示。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用OpenCV读取RAW图像,需要先了解一下RAW图像的格式RAW图像是指未经过压缩或处理的图像数据,通常由相机或其他设备直接输出。由于RAW图像格式因设备而异,因此在读取之前需要知道图像的尺寸、位深度、颜色空间等信息。 下面是使用OpenCV读取RAW图像的基本流程: 1. 读取RAW图像数据到内存中(可以使用C++中的文件流或者其他方法)。 2. 将图像数据转换为OpenCV支持的Mat对象。 3. 对Mat对象进行后续处理或者显示。 具体实现可以参考下面的代码: ```c++ #include <iostream> #include <fstream> #include <opencv2/opencv.hpp> using namespace std; using namespace cv; int main() { // 读取RAW图像数据 ifstream fin("raw_image.raw", ios::binary); fin.seekg(0, ios::end); int size = fin.tellg(); fin.seekg(0, ios::beg); char* data = new char[size]; fin.read(data, size); fin.close(); // 设置图像参数 int width = 640; int height = 480; int depth = 8; // 位深度 int channel = 1; // 通道数 int type = CV_MAKETYPE(CV_8U, channel); // OpenCV支持的数据类型 // 创建Mat对象并将数据复制到对象中 Mat image(height, width, type, data); // 显示图像 namedWindow("RAW Image", WINDOW_NORMAL); imshow("RAW Image", image); waitKey(0); // 释放内存 delete[] data; return 0; } ``` 在上面的代码中,我们使用了一个ifstream对象来读取RAW图像数据,并将其保存在一个char数组中。然后,我们需要设置图像的参数,包括图像的尺寸、位深度、通道数和数据类型。最后,我们创建了一个Mat对象,并将数据复制到对象中。最后,我们使用imshow函数显示图像。 需要注意的是,由于RAW图像数据没有经过压缩或处理,因此在处理时需要注意数据的精度和范围,以避免数据损失或溢出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值