RGB565到灰度

问题描述 投票:0回答:1

我正在尝试将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位。

c image-processing rgb grayscale
1个回答
0
投票
因此,要使值范围等于RedBlue的值,只需将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;

© www.soinside.com 2019 - 2024. All rights reserved.