RAW图像数据到RGB
https://blog.csdn.net/peng864534630/article/details/78177211
是的,raw是每个像素一种颜色,而一个像素(通常)是12位。因此,原始像素共有三种颜色,有些是蓝色,有些是红色,那些计数的2倍是绿色。
然后,原始处理软件(要制作RGB JPG,可以直接在相机中,也可以稍后在外部使用)将原始数据转换为RGB图像,以便我们可以使用它。
这是插值,将其他两种颜色的相邻像素合并到这些RGB像素中的每一个中,但所有像素均变为RGB像素。
https://qastack.cn/photo/86170/raw-files-store-3-colors-per-pixel-or-only-one
raw读取、不同格式图片差异
https://blog.csdn.net/darlingqiang/article/details/109259505
raw图像(本文是raw8),opencv的imread不支持直接读入,但可以通过c++的ifstream读入。
注意的一点是,读取时,mode要设置成std::ios::binary,即把raw图像当做二进制文件读入。
// open raw data
const 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 buffer
char* buffer = new char [length];
// read函数读取(拷贝)流中的length各字节到buffer
fin.read(buffer, length);
// construct opencv mat and show image
cv::Mat image(cv::Size(1280, 800), CV_8UC1, buffer);
cv::imshow("test", image);
cv::waitKey();