我正在尝试将RGB565转换为灰度图像。
我使用下面的代码进行转换。我有一个rgb565像素。我正在获取R,G和B值并进行转换操作。一旦获得了灰度,我将重建一个16位像素值,其中R,G和B将具有相同的灰度值。
int16_t pixel = *buffer;
int16_t red = ((pixel & 0xF800)>>11);
int16_t green = ((pixel & 0x07E0)>>5);
int16_t blue = (pixel & 0x001F);
int16_t grayscale = (0.2126 * red) + (0.7152 * green) + (0.0722 * blue);
*buffer=(grayscale<<11)+(grayscale<<5)+grayscale;
[这里,我期望有灰度图像。但是,正在发生的是->
绿色具有6位空间(幅度更大)。最终的灰度值应为5位,这样,我就适合R G和B。但是,完成的计算提供了6位灰度,因此我没有得到合适的灰度图像。
[谁能帮我将rgb565转换为灰度并将其存储为16位。
Red
和Blue
的值,只需将Green
值除以2: int16_t pixel = *buffer;
int16_t red = ((pixel & 0xF800)>>11);
int16_t green = ((pixel & 0x07E0)>>5);
int16_t blue = (pixel & 0x001F);
int16_t grayscale = (0.2126 * red) + (0.7152 * green / 2.0) + (0.0722 * blue);
// ^^^^^
*buffer=(grayscale<<11)+(grayscale<<6)+grayscale;