ISP【三】———— raw读取、不同格式图片差异
part zero:
如何处理.raw格式数据,读取和转化
matlab读取raw图 (mark读取图片尺寸和位数均可设置,图片尺寸M,N,图片数据类型8bit,16bit改成uint16)
clear;
clc;
close all;
%
% rotpath = imread('D:\matlab\ncc_ive_pc_diff\ncc_diff\nv21_test_dst_rotate90.raw'); %%1280*800 8bit
% mesh(nv_rot);
% path= imread('C:\Users\Administrator\Desktop\nv21_test_dst_rotate90.raw'); %%1280*800 8bit [filename, pathname] = uigetfile('D:\matlab\ncc_ive_pc_diff\ncc_diff\nv21_test_dst_rotate90.raw', '读入图像');
f1 = fopen([pathname, filename], 'r');
data = fread(f1, 'uint8');
fclose(f1);
len = length(data);
k = len/(1280*800);
image = reshape(data, 800, 1280, k);
mesh(image);[filename2, pathname2] = uigetfile('D:\matlab\ncc_ive_pc_diff\ncc_diff\nv21_test_src.raw', '读入图像');
f2 = fopen([pathname2, filename2], 'r');
data2 = fread(f2, 'uint8');
fclose(f2);
len2 = length(data2);
k2 = len2/(1280*800);
image2 = reshape(data, 800, 1280, k2);
figure(2);
mesh(image2);image_diff = image2-image;
figure(3);
mesh(image_diff);
raw图像(本文是raw8),opencv的imread不支持直接读入,但可以通过c++的ifstream读入。
注意的一点是,读取时,mode要设置成std::ios::binary,即把raw图像当做二进制文件读入。
读取后,构造opencv mat,并显示出来,代码如下:
// open raw dataconst std::string file_path = "/home/zhangshan/image/image.raw";std::ifstream fin;// 注意,这里要指定binary读取模式fin.open(file_path, std::ios::binary);if (!fin) {std::cerr << "open failed: " << file_path << std::endl;}// seek函数会把标记移动到输入流的结尾fin.seekg(0, fin.end);// tell会告知整个输入流(从开头到标记)的字节数量int length = fin.tellg();// 再把标记移动到流的开始位置fin.seekg(0, fin.beg);std::cout << "file length: " << length << std::endl;// load bufferchar* buffer = new char [length];// read函数读取(拷贝)流中的length各字节到bufferfin.read(buffer, length);// construct opencv mat and show imagecv::Mat image(cv::Size(1280, 800), CV_8UC1, buffer);cv::imshow("test", image);cv::waitKey();
part one:
raw格式图片是相机拍摄并记录下来的带有原始信息的视频或者图片,包含传感器元数据、传感器尺寸、颜色属性、配置文件等等信息,以方便后期对视频及图片做更大幅度的处理。几乎未经压缩,也完全没进行各种处理,与记录拍摄时“用户的相机设置信息”数据被一同保存下来。既然是原始文件,一定很大,对传输带宽、存储空间都有特别的要求,而且每个摄像机、照相机厂家对自己的原始文件(RAW)开放程度、记录方式等要求都不一样。
参考:https://zhuanlan.zhihu.com/p/129055040
part two:
不同图片格式的区别
part three:
mipi raw与raw区别
part four:
uint8_t* speckle;cv::Mat speckle_image;if (speckle_file_extern == ".raw") {speckle = new uint8_t[kInWidth_g * kInHeight_g];ASSERT_NE(speckle, nullptr);FILE* fp = fopen(imagesPath.speckle_Path_.c_str(), "rb");ASSERT_NE(fp, nullptr);fread(speckle, 1, kInWidth_g * kInHeight_g, fp);fclose(fp);} else if (speckle_file_extern == ".bmp") {cv::Mat speckle_image_t = cv::imread(imagesPath.speckle_Path_, cv::IMREAD_ANYDEPTH);ASSERT_FALSE(speckle_image_t.empty());speckle_image = speckle_image_t.clone();speckle = speckle_image.data;}delete[] out_depth;if (ir_file_extern == ".raw")delete[] ir;if (speckle_file_extern == ".raw")delete[] speckle;
part five:
raw 参考blog:
[1]https://blog.csdn.net/qq_42261630/article/details/102922737
ISP【三】———— raw读取、不同格式图片差异相关推荐
- C语言读取BMP格式图片
C语言读取BMP格式图片 BMP 维基百科,自由的百科全书 汉漢▼ 位图 扩展名 .bmp 开发者 Microsoft 格式 图像文件格式 本文介绍的是一种图像文件格式. 关于Unicode的第1区 ...
- c语言实现pdf显示图片,C语言读取BMP格式图片.pdf
C语言读取BMP格式图片 C 语言读取BMP 格式图片 以下摘自维基百科,自由的百科全书 BMP 取自位图BitMaP 的缩写,也称为DIB (与设备无关的位图)是微软视窗图形 子系统(Graphic ...
- Halcon读取jpg格式图片失败的处理方法
halcon读取jpg格式图片时,抛异常.最先想到的方法是用windows的画图软件或者PicPix软件将jpg格式的图片另存为BMP格式,但图片数量较多,这种方法不可取. 如下的方法,利用Graph ...
- GDAL库三个读取Jpeg2000格式驱动测试
0.目的 GDAL库中提供了四五种读取Jpeg2000的驱动,但是各个驱动读取数据的效率各不相同,下面就针对三种读取jpeg2000的效率进行测试. GDAL库中提供的读取Jpeg2000的驱动有下面 ...
- linux下通过C语言读取BMP格式图片,在文本终端显示该图片
第一步:打开需要读取的图片文件 fd = open(picture, O_RDONLY): //只读方式打开文件 第二步:读取图片的长,宽,每个像素占多少字节,偏移量 查看bmp格式就能知道各个数据两 ...
- ImageIO.read(inputStream)读取.webp格式图片报错
0.码仙励志 莫妒他长,妒长,则己终是短.莫护己短,护短,则己终不长. 1.问题描述 今天测试提了一个新bug,查找原因是因为测试上传了一张.webp格式的图片. 在代码运行到 javax.image ...
- C++读取bmp格式图片
类的格式按照bmp的文件头.信息头.调色板和数据域写好即可 因为图片是按字节读的,所以要强制让编译器不对结构体进行字节对齐,否则会出错 因为bmp格式规定存储时每行的像素数要补齐至4的整数倍,所以读入 ...
- verilog读取bmp格式图片
代码如下: `timescale 1 ns/1 ns module test_t; integer fileId, cc,out_file,i; reg [7:0] bmp_data [0:20000 ...
- tensorflow读取jpg格式图片报错 ValueError: Only know how to handle extensions: ['png']; with Pillow installed
当运行mpimg.imread("img.jpg")时,spyder 出现如下错误: ValueError: Only know how to handle extensions: ...
最新文章
- mysql 子sql中调用存储过程_mysql 子sql中调用存储过程
- Hadoop分布式集群搭建hadoop2.6+Ubuntu16.04
- IntelliJ IDEA for Mac在MacOS模式下的版本控制/本地历史记录快捷键(VCS and Local History Shortcut)
- java beetl 视频_04.Beetl常用内置函数以及安全输出---《Beetl视频课程》
- ffmpeg前景_5G时代音视频开发前景怎么样?音视频开发需要掌握哪些技术?
- mysql的本地id可以随便设置马_Mysql主从复制原理及搭建
- Windows任务栏实现动态自动隐藏并透明
- 【FXCG】如何成功启动SWOT分析法
- 210917-电脑护眼模式总结
- 本学期在实验室的收获
- 自然语言处理实战——巧用 Amazon Comprehend 分析社交媒体数据
- 抖音短视频买的粉丝是真的吗?多少人懂这点
- 使用Nightwatch.js做基于浏览器的web应用自动测试
- Vue Props是什么
- 2021年移动开发者未来的出路在哪里,年薪50W
- 电脑检测软件列表及电脑硬件驱动大全
- 王道论坛机试指南学习笔记(五)搜索
- java计算机毕业设计课外创新实践学分认定管理系统源码+数据库+lw文档+系统
- HTML5 网页端年会抽奖源码,导入名单列表即可使用
- carla创建地图(三)基于cityengine创建地图
热门文章
- linux mysql 无法识别,Linux下MySQL 5.7.23无法远程连接解决方案
- 【C++】何时需要自定义拷贝构造函数和赋值符
- Linux进程间的通信----->共享内存
- oracle中的聚簇,Oracle数据库的聚簇技术
- OpenCV中的光流及视频特征点追踪
- C语言:十六进制(HEX)和浮点类型(float、double)转换
- 物体识别算法——SIFT/SURF、haar特征、广义hough变换的对比分析
- NanodetPlus网络结构
- 计算机刷新的作用,图文详解Win8重置和刷新功能:超强自我治愈
- 【只需三步】用IDEA打开一个新的jsp项目如何跑起来(运行起来)