转载请注明出处。
文章地址:https:///duiwangxiaomi/article/details/105847284?spm=1001.2014.3001.5501
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 象素点被安排如下:
因篇幅问题不能全部显示,请点此查看更多更全内容