组成两个原始图像缓冲区:
- 拜耳原始数据,每个像素包含 10 位;
- 原始缓冲区有 4192x3104 像素
- 只需添加相应的位数据即可
- 使用 C/C++ 语言
- 在 Android 移动平台上
如何有效组合两个原始缓冲区?
现在,我试着这样做:
- 从 rawBuf1 和 rawBuf2 读取 8 个像素,因为我可以使用 16 位数组(
unsigned short pixelWord[5]
)和 5 个长度来存储它们(8X10 位 = 5x16 位) - 我喜欢这样:p0
unsigned short p0 = (unsigned short )((pixelWord1[0] & 0X03FF) +(pixelWord2[0] & 0X03FF))
等
但是上层效率太低了。
最佳答案
像素数据以字节流的形式出现,存储在原始缓冲区中
unsigned char rawBuf1[100], rawBuf2[100];
根据您平台的字节顺序,您可以尝试 bit fields并让编译器弄清楚如何访问像素
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;
但请注意,如果它能工作的话,它高度依赖于平台和编译器。
关于c++ - 如何用C/C++高效的合成Bayer Raw10数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23471671/