在arm板上cmos得到的图象格式是RGB565格式,而在opencv上处理的格式是的BGR888。
RGB565用两个字节来存一个像素点,其中三个通道分别占5个,6个,5个位。
BGR888用三个字节来存一个像素点,每个通道占8个位(即一个字节)。
转换时,直接对应通道,用RGB565的值补BGR888的高位。
比如RGB565:11100 111001 11111转成BGR888:1111100 11100100 11100000
代码
const short RGB565_MASK_RED = (0x1F)<<11;
const short RGB565_MASK_GREEN = (0x3F)<<5;
const short RGB565_MASK_BLUE = (0x1F);
void rgb5652bgr888(short *src, char *dest, int size){
for(int i = 0; i< size; i++){
unsigned short RGB16 = *src;
dest[i*3+2] = (RGB16&RGB565_MASK_RED) >> 11;
dest[i*3+1] = (RGB16&RGB565_MASK_GREEN) >> 5;
dest[i*3+0] = (RGB16&RGB565_MASK_BLUE);
dest[i*3+2] <<= 3;
dest[i*3+1] <<= 2;
dest[i*3+0] <<= 3;
src++;
}
}