如何用C/ c++有效地编写拜耳Raw10数据

How to compose the Bayer Raw10 data by C/C++ effectively?

本文关键字:Raw10 数据 有效地 何用 c++      更新时间:2023-10-16

组成两个原始图像缓冲区:

  1. 拜耳原始数据,包括每像素10位;
  2. 一个原始缓冲区有4192x3104像素
  3. 只需添加相应的位数据
  4. 使用C/c++语言
  5. Android手机平台

如何有效地组合两个原始缓冲区?

现在,我试着这样做:

  1. 从rawBuf1和rawBuf2读取8像素,因为我可以使用16位数组(unsigned short pixelWord[5])与5个长度来存储它们(8X10位= 5x16位)
  2. 我这样做:p0 unsigned short p0 = (unsigned short )((pixelWord1[0] & 0X03FF) +(pixelWord2[0] & 0X03FF))

像素数据以字节流的形式出现,存储在原始缓冲区

unsigned char rawBuf1[100], rawBuf2[100];

根据您的平台的端序,您可以尝试位字段,并让编译器找出如何访问像素

struct pixels0 {
    unsigned long long p0 : 10;
    unsigned long long p1 : 10;
    unsigned long long p2 : 10;
    unsigned long long p3 : 10;
    unsigned long long p4 : 10;
    unsigned long long p5 : 10;
};
struct pixels6 {
    unsigned long long pad : 4;
    unsigned long long p6 : 10;
    unsigned long long p7 : 10;
};

你可以用

unsigned short p0 = ((struct pixels0*)&rawBuf1[0])->p0 + ((struct pixels0*)&rawBuf2[0])->p0;
/* ... */
unsigned short p5 = ((struct pixels0*)&rawBuf1[0])->p5 + ((struct pixels0*)&rawBuf2[0])->p5;
unsigned short p6 = ((struct pixels6*)&rawBuf1[7])->p6 + ((struct pixels6*)&rawBuf2[7])->p6;
unsigned short p7 = ((struct pixels6*)&rawBuf1[7])->p7 + ((struct pixels6*)&rawBuf2[7])->p;