野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 16558|回复: 6

rgb565二值化

[复制链接]
发表于 2017-3-18 13:13:53 | 显示全部楼层 |阅读模式
本帖最后由 Roc 于 2017-3-18 13:23 编辑

我在ov2640例程的基础上把图像做二值化处理,结果还是有黄色和蓝色,这咋回事,
#define rgbtogray(x) \
                (unsigned char) ( \
                        ((((x)&0xF800)>>8)*77+ \
                  (((x)&0x07E0)>>3)*105+ \
                  (((x)&0x001F)<<3)*29+ \
                   128)/256         \
                )
//灰度化
主函数:
                for(i=0;i<480;i++)
                {
                        for(j=0;j<1600;j++)
                        {
                                volatile uint32_t tem=*(uint32_t *)(RGB_IMG_ADDRESS+lcd_width*2*i+j);
                                volatile uint16_t n=*(uint32_t *)(RGB_IMG_ADDRESS+lcd_width*2*i+j)>>16;
                                volatile uint16_t m=tem&0x0000ffff;
                          if(rgbtogray(n)<THRESH&&rgbtogray(m)<THRESH)
                                {
                                        *(uint32_t *)(FSMC_LCD_ADDRESS+lcd_width*2*(lcd_height-i-1)+j)=0xffffffff;  //THRESH是阈值
                                }
                                else if(rgbtogray(n)>=THRESH&&rgbtogray(m)>=THRESH)
                                {
                                        *(uint32_t *)(FSMC_LCD_ADDRESS+lcd_width*2*(lcd_height-i-1)+j)=0x00000000;
                                }
                                else if(rgbtogray(n)<THRESH&&rgbtogray(m)>=THRESH)
                                {
                                        *(uint32_t *)(FSMC_LCD_ADDRESS+lcd_width*2*(lcd_height-i-1)+j)=0xffff0000;
                                }
                                else
                                {
                                        *(uint32_t *)(FSMC_LCD_ADDRESS+lcd_width*2*(lcd_height-i-1)+j)=0x0000ffff;
                                }
                        }
                }

无标题.png
回复

使用道具 举报

 楼主| 发表于 2017-3-18 14:05:27 | 显示全部楼层
哦我知道了for()中j应该自加2,不能加1
无标题.png
回复 支持 反对

使用道具 举报

发表于 2017-3-18 14:10:44 | 显示全部楼层
ov2640有个黑白模式的,用程序里的special effect函数可以设置
回复 支持 反对

使用道具 举报

发表于 2017-3-24 23:25:31 | 显示全部楼层
楼主能共享下程序么,我也想试试
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-29 09:56:50 | 显示全部楼层
liaojiawei 发表于 2017-3-24 23:25
楼主能共享下程序么,我也想试试

就是OV2640的例程加上我上面写的代码,还有OV2640_DMA_Config(RGB_IMG_ADDRESS,img_width*2/4);传输数据不要往 FSMC_LCD_ADDRESS传了
回复 支持 反对

使用道具 举报

发表于 2017-7-9 20:44:36 | 显示全部楼层
楼主能分享下代码?
回复 支持 反对

使用道具 举报

发表于 2019-9-9 22:39:53 | 显示全部楼层
楼主,我想知道为啥这样进行操作,二值化的流程是怎么样的?还有就是你最上面那个宏为啥那样写?在二值化函数中为啥向RGB_IMG_ADDRESS中传入数据?
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-21 19:33 , Processed in 0.031806 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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