OV2640转灰度图像 R,G,B三 {MOD}提取有问题

2019-07-20 09:49发布

本帖最后由 QMXi 于 2018-1-25 13:54 编辑

我用的是stm32f407加OV2640,120x160的图像,如图所示,公式是按照网上查的公式写的,R,G,B三 {MOD}提取后显示的都是蓝 {MOD},合成灰度后也显示的是蓝 {MOD},哪位大神知道是公式的原因还是其他的原因?

u32 RGB_BUF[Width][High];       


u32 RGB_BUF[Width][High];       
u32 R,G,B;

void RGB_data_process(void)
{
        u16 i,j;
        for(i=0;i<Width;i++)
                for(j=0;j<High;j++)
                {
                         LCD_SetCursor(j,i);
                         LCD_WriteRAM_Prepare();

                         R = (RGB_BUF[j] & 0x00FF0000) >> 16;
                         G = (RGB_BUF[j] & 0x0000FF00) >> 8;
                         B = (RGB_BUF[j] & 0x000000FF) >> 0;

                         LCD->LCD_RAM = ( R*38 +  G * 75 +  B * 15 )>>7;
                       
                }
}

    这是部分程序,灰度转换后显示出来的是蓝 {MOD}的,难道是公式的问题?这个是在网上搜的一个公式,RGB565应该是16位图像,为什么定义时是u32类型?(u32 RGB_BUF[Width][High]),按照道理应该是16位,分别右移5位,11位才对
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4条回答
QMXi
2019-07-20 18:37
本帖最后由 QMXi 于 2018-1-25 13:48 编辑
huyang201306 发表于 2018-1-25 09:19
直接RGB格式输出,然后通过移位,就阔以提取了

u32 RGB_BUF[Width][High];        

void RGB_data_process(void)
{
        u16 i,j;
        for(i=0;i<Width;i++)
                for(j=0;j<High;j++)
                {
                         LCD_SetCursor(j,i);
                         LCD_WriteRAM_Prepare();

                         R = (RGB_BUF[j] & 0x00FF0000) >> 16;
                         G = (RGB_BUF[j] & 0x0000FF00) >> 8;
                         B = (RGB_BUF[j] & 0x000000FF) >> 0;

                         LCD->LCD_RAM = ( R*38 +  G * 75 +  B * 15 )>>7;
                        
                }
}
这个是我程序,昨天忘贴出来了,这个是按照网上公式来计算的,但是显示的是蓝 {MOD}的,还有一个问题就是RGB565不是16位吗?为什么定义时是32位的(u32格式)?
R = (RGB_BUF[j] & 0x00FF0000) >> 16; 这个右移了16位?

一周热门 更多>