
例如Photoshop
RAW的原意就是“未经加工”。可以理解为:RAW图像就是CMOS或者CCD图像感应器将捕捉到的光源信号转化为数字信号的原始数据。RAW是未经处理、也未经压缩的格式,可以把RAW概念化为“原始图像编码数据”或更形象的称为“数字底片”。qt做的程序界面
opencv打开raw图
以下为部分须知
1:raw图路径获取 ,此部分为qt内容,此为相对可更改的路径,如果需要绝对路径可直接定义filepath 路径名称
QString filepath=QFileDialog::getOpenFileName();
FILE fp = NULL;
QByteArray byte=filepathtoLatin1();
const char filename=bytedata();
2:raw 10 ,16为两个byte 一个通道数值,raw 8 为1个byte 一个通道数值
raw 10,raw16 内存定义
unsigned short pRawData = (unsigned short )calloc(widthheight, sizeof(unsigned short));
四通道内存定义
unsigned short R = (unsigned short )calloc(widthheight/2, sizeof(unsigned short));
raw 8 内存定义
unsigned char pRawData = (unsigned char )calloc(widthheight, 1);
四通道内存定义
unsigned char R = (unsigned char)calloc(widthheight, 1);
3:读取raw图
fread(pRawData,sizeof(unsigned short)widthheight,1, fp);
4:raw图为bayer 单通道,需将其转换为四通道排布
raw图的四个通道有不同的排序方式,要想正常显示,需要确认sensor的rgb的排布
IplImage pBayerData = cvCreateImage(cvSize(width,height),16 , 1); //定义一个单通道
IplImage pRgbDataInt16 = cvCreateImage(cvSize(width,height),16,3); //定义一个三通道
memcpy(pBayerData->imageData, (char )pRawData, widthheightsizeof(unsigned short)); //将raw图的信息附到但通道中
cvCvtColor(pBayerData, pRgbDataInt16, CV_BayerRG2RGB); //单通道转换为三通道 ,需要确认sensor的rgb的排布
4:raw图显示时最后需要转换为0-255rgb范围内显示,所以raw10,raw16转换时需要除以相应倍数,否则画面不能正常显示
IplImage pRgbDataInt8 = cvCreateImage(cvSize(width,height),8,3);
cvConvertScale(pRgbDataInt16, pRgbDataInt8, 025, 0); //025为raw10与raw8的数据转换
5:显示部分就不讲了
6:raw图数据四个通道输出
for (y=0;y<height;y+=2)
{
for (x=0;x<width;x+=2,e++)
{
Pos1=x+widthy;
Pos2=x+width(y+1);
//图像rgbg排序
R[e]=pRawData[Pos1];
Gr[e]=pRawData[Pos1+1];
Gb[e]=pRawData[Pos2];
B[e]=pRawData[Pos2+1];
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)