OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4452|回复: 4

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

[复制链接]

1

主题

7

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2018-1-24
在线时间
4 小时
发表于 2018-1-24 21:15:02 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 QMXi 于 2018-1-25 13:54 编辑

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

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;
                       
                }
}

    这是部分程序,灰度转换后显示出来的是蓝色的,难道是公式的问题?这个是在网上搜的一个公式,RGB565应该是16位图像,为什么定义时是u32类型?(u32 RGB_BUF[Width][High]),按照道理应该是16位,分别右移5位,11位才对

正常显示图像程序

正常显示图像程序

RGB565转灰度程序

RGB565转灰度程序
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-1-25 01:30:05 | 显示全部楼层
试试直接输出YUV,这个处理起来速度比较快
回复

使用道具 举报

35

主题

309

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2641
金钱
2641
注册时间
2016-8-10
在线时间
470 小时
发表于 2018-1-25 09:19:08 | 显示全部楼层
直接RGB格式输出,然后通过移位,就阔以提取了  
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2018-1-24
在线时间
4 小时
 楼主| 发表于 2018-1-25 13:47:40 | 显示全部楼层
本帖最后由 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;
                        
                }
}
这个是我程序,昨天忘贴出来了,这个是按照网上公式来计算的,但是显示的是蓝色的,还有一个问题就是RGB565不是16位吗?为什么定义时是32位的(u32格式)?
R = (RGB_BUF[j] & 0x00FF0000) >> 16; 这个右移了16位?
回复

使用道具 举报

1

主题

17

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
207
金钱
207
注册时间
2018-1-8
在线时间
36 小时
发表于 2018-1-25 14:02:29 | 显示全部楼层
帮顶帮顶
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 08:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表