raw格式圖片讀取與顯示C++,opencv

      Bayer是相機內部的原始圖片, 一般後綴名爲.raw。很多軟件都可以查看, 比如PS.Bayer 模式被廣泛應用於 CCD 和 CMOS 攝像頭,它允許從一個單獨平面中得到彩色圖像。我們相機拍照下來存儲在存儲卡上的.jpeg或其它格式的圖片, 都是從.raw格式轉化而來。

      接下來實現raw格式圖片的讀取與顯示,程序如下:

#include <iostream>
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

int main()
{
	char *rawFileName = "img.raw";
	FILE *fp = NULL;
	int ret = 0, width = 1600, height = 280;
	unsigned char *pRawData = (unsigned char *)malloc(width*height*sizeof(unsigned char));

	if (NULL == pRawData)
	{
		printf("Fail to calloc buf\r\n");
		return -1;
	}

	if (NULL == (fp = fopen(rawFileName, "rb")))
	{
		printf("Fail to read %s.\r\n", rawFileName);
		return -2;
	}

	ret = fread(pRawData, sizeof(unsigned char)*width*height, 1, fp);
	if (ret != 1)
	{
		printf("Fail to read raw data\r\n");
		return -3;
	}
	Mat img(Size(width, height), CV_8UC1, pRawData);
	Mat img2(Size(width, height), CV_8UC3, Scalar(0));
	cvtColor(img,img2,CV_BayerGB2BGR);
	cvNamedWindow("img", 1);
	imshow("img", img);
	cvWaitKey(0);
	cvDestroyWindow("img");
	return 0;
}

      opencv實現了Bayer=>RGB的轉換,描述如下:
Bayer=>RGB (CV_BayerBG2BGR, CV_BayerGB2BGR, CV_BayerRG2BGR, CV_BayerGR2BGR, CV_BayerBG2RGB, CV_BayerRG2BGR, CV_BayerGB2RGB, CV_BayerGR2BGR, CV_BayerRG2RGB, CV_BayerBG2BGR, CV_BayerGR2RGB, CV_BayerGB2BGR)

Bayer 模式被廣泛應用於 CCD 和 CMOS 攝像頭. 它允許從一個單獨平面中得到彩色圖像,該平面中的 R/G/B 象素點被安排如下:
在這裏插入圖片描述
對像素輸出的RGB份量由該像素的1、2或者4鄰域中具有相同顏色的點插值得到。以上的模式可以通過向左或者向上平移一個像素點來作一些修改。轉換常量CV_BayerC1C22{RGB|RGB}中的兩個字母C1和C2表示特定的模式類型:顏色份量分別來自於第二行,第二和第三列。比如說,上述的模式具有很流行的"BG"類型。
參考網址1
參考網址2

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章