Raw資料讀取以及轉換為Mat
阿新 • • 發佈:2018-12-31
Raw資料介紹:
RAW的原意就是“未經加工”。可以理解為:RAW影象就是CMOS或者CCD影象感應器將捕捉到的光源訊號轉化為數字訊號的原始資料。RAW檔案是一種記錄了數碼相機感測器的原始資訊,同時記錄了由相機拍攝所產生的一些元資料(Metadata,如ISO的設定、快門速度、光圈值、白平衡等)的檔案。RAW是未經處理、也未經壓縮的格式,可以把RAW概念化為“原始影象編碼資料”或更形象的稱為“數字底片”。RAW格式的全稱是RAW Image Format,在程式設計中稱之為原始。
把Raw資料轉化為三通道Mat資料
記錄一下,我想,應該可以不通過void RawToMat(const char filename[], cv::Mat& dst,int width=1024,int height=1024) { size_t nsize = width*height; unsigned short *data = new unsigned short[nsize]; if (data == NULL) { std::cout << "data space malloc failed" << std::endl; } FILE *file; // fopen_s(&file, fileName, "rb+"); file = fopen(filename, "rb+"); fread(data, sizeof(unsigned short), nsize, file); fclose(file); cv::Mat temp(height, width, CV_16UC1, data);//單通道的Mat raw資料 cv::Mat mtep[3]; temp.copyTo(mtep[0]); temp.copyTo(mtep[1]); temp.copyTo(mtep[2]); cv::Mat mergeM(height, width, CV_16UC3); cv::merge(mtep, 3, mergeM); mergeM.convertTo(dst, CV_32FC3); delete[] data; return; }
unsigned short *data = new unsigned short[nsize];
作為中介轉換資料,可以直接把資料讀入mat的data中去。沒有除錯,所以僅作猜想。如果可以直接存入,可以節約一些時間。