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 版权协议,转载请附上原文出处链接和本声明。