OpenEdv-开源电子网

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

STM32F4 OV2640采集问题

[复制链接]

3

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2016-6-23
在线时间
8 小时
发表于 2016-6-23 18:11:37 | 显示全部楼层 |阅读模式
1金钱
用原子哥的照相机实验例程,OV2640的数据放到SRAM里面之后,怎么取出来再显示在LCD屏上,因为要对采集的图像进行处理

最佳答案

查看完整内容[请看2#楼]

我一般情况下,是让OV2640输出YUV格式,取其Y值,即亮度值,经过阀值处理后,变为二值化图像。 阀值多少,那要看你了,没有固定值。你可以按照你的方案理论上设置个,也可以实际调试后决定
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

71

帖子

0

精华

高级会员

Rank: 4

积分
758
金钱
758
注册时间
2015-8-25
在线时间
165 小时
发表于 2016-6-23 18:11:38 | 显示全部楼层
xxp 发表于 2016-6-24 18:39
还有疑惑是,提取出R 、G、B三个值后要对图像二值化,然后进行识别,那二值化的阈值是多少呢

我一般情况下,是让OV2640输出YUV格式,取其Y值,即亮度值,经过阀值处理后,变为二值化图像。

阀值多少,那要看你了,没有固定值。你可以按照你的方案理论上设置个,也可以实际调试后决定
回复

使用道具 举报

0

主题

71

帖子

0

精华

高级会员

Rank: 4

积分
758
金钱
758
注册时间
2015-8-25
在线时间
165 小时
发表于 2016-6-23 19:19:17 | 显示全部楼层
本帖最后由 phoenix 于 2016-6-23 19:27 编辑

先让OV2640输出数据到  你定义的数组中。然后  读取数组中的数据 经过处理后 再用LCD的写点函数显示在LCD上。
#define bmp565_buf_size 160*120                        //定义bmp565数据缓存bmp565_buf的大小(*4字节)
__align(4) u16 bmp_buf[bmp565_buf_size];        //bmp565数据缓存buf



DCMI_DMA_Init((u32)&bmp_buf,bmp565_buf_size,1,1);//DCMI DMA配置        让OV2640输出数据到  定义的数组中bmp_buf

OV2640_OutSize_Set(160,120);


u16 x,y;//图像像素点坐标

for(y=0;y<120;y++)
{
        for(x=0;x<160;x++)
        {
                temp1=bmp_buf[y*160+x];
                LCD_Fast_DrawPoint(x,y,temp1);//快速画点
        }
}

回复

使用道具 举报

3

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2016-6-23
在线时间
8 小时
 楼主| 发表于 2016-6-24 09:11:33 | 显示全部楼层
phoenix 发表于 2016-6-23 19:19
先让OV2640输出数据到  你定义的数组中。然后  读取数组中的数据 经过处理后 再用LCD的写点函数显示在LCD上 ...

如果用DMA双缓存呢,现在画出来效果很不好,会有那种图片在动的感觉
回复

使用道具 举报

3

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2016-6-23
在线时间
8 小时
 楼主| 发表于 2016-6-24 09:52:28 | 显示全部楼层
再问一下,外部RAM里的数据用画点函数图片显示出来会怎么样,还是要直接赋给LCDRAM好
回复

使用道具 举报

3

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2016-6-23
在线时间
8 小时
 楼主| 发表于 2016-6-24 18:37:32 | 显示全部楼层
LCD显示已经没问题了
回复

使用道具 举报

3

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2016-6-23
在线时间
8 小时
 楼主| 发表于 2016-6-24 18:39:14 | 显示全部楼层
还有疑惑是,提取出R 、G、B三个值后要对图像二值化,然后进行识别,那二值化的阈值是多少呢
回复

使用道具 举报

3

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2016-6-23
在线时间
8 小时
 楼主| 发表于 2016-6-25 10:15:06 | 显示全部楼层
phoenix 发表于 2016-6-23 18:11
我一般情况下,是让OV2640输出YUV格式,取其Y值,即亮度值,经过阀值处理后,变为二值化图像。

阀值多 ...

                                R=rgb_data_buf[y*320+x]>>11;
                                G=(rgb_data_buf[y*320+x]&0x07E0)>>5;
                                B=(rgb_data_buf[y*320+x]&0x001F);
                                if((R<0X0015)&&(B<0X0015)&&(G<0X0015))
                                {
                                        rgb_data_buf[y*320+x]=0x0000;        //黑色
                                        ss++;
                                }
这样取RGB三个值和判断可以吗,想做自适应二值化来着
回复

使用道具 举报

0

主题

71

帖子

0

精华

高级会员

Rank: 4

积分
758
金钱
758
注册时间
2015-8-25
在线时间
165 小时
发表于 2016-6-25 11:06:58 | 显示全部楼层
xxp 发表于 2016-6-25 10:15
R=rgb_data_buf[y*320+x]>>11;
                                G=(rgb_data_buf[y*320+x]&0x07E0)>>5;
         ...

可以这样,做判断

R=rgb_data_buf[y*320+x]>>11;
G=(rgb_data_buf[y*320+x]&0x07E0)>>5;
B=(rgb_data_buf[y*320+x]&0x001F);

if((R<0x0015)&&(B<0x0015)&&(G<0x0015))
{
        rgb_data_buf[y*320+x]=0x0000;        //黑色
}
else
{
        rgb_data_buf[y*320+x]=0xFFFF;        //白色       
}
ss++;


但,这样是固定阀值判断,出来的二值化图像是否你想要的就不清楚了。
回复

使用道具 举报

3

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2016-6-23
在线时间
8 小时
 楼主| 发表于 2016-6-25 11:20:10 | 显示全部楼层
phoenix 发表于 2016-6-25 11:06
可以这样,做判断

R=rgb_data_buf[y*320+x]>>11;

固定阈值确实很不好,出来的二值化图像效果很不好,距离一远就更差了,我试试自适应
回复

使用道具 举报

3

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2016-6-23
在线时间
8 小时
 楼主| 发表于 2016-6-25 11:23:03 | 显示全部楼层
xxp 发表于 2016-6-25 11:20
固定阈值确实很不好,出来的二值化图像效果很不好,距离一远就更差了,我试试自适应

阈值设为0X0015出来都是白色
回复

使用道具 举报

0

主题

71

帖子

0

精华

高级会员

Rank: 4

积分
758
金钱
758
注册时间
2015-8-25
在线时间
165 小时
发表于 2016-6-25 11:33:15 | 显示全部楼层
xxp 发表于 2016-6-25 11:23
阈值设为0X0015出来都是白色

你是做     循迹小车?

无论你做什么,你可以在程序里添加    用2个按键随时增加或减少你定义的阀值   这样在系统运行时,你可以调试出你理想的阀值。
回复

使用道具 举报

3

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2016-6-23
在线时间
8 小时
 楼主| 发表于 2016-6-25 12:08:57 | 显示全部楼层
phoenix 发表于 2016-6-25 11:33
你是做     循迹小车?

无论你做什么,你可以在程序里添加    用2个按键随时增加或减少你定义的阀值   ...

四轴,最后就是要识别几何图形,二值化后感觉还是好烦=。=
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2016-7-20
在线时间
0 小时
发表于 2016-7-20 09:19:18 | 显示全部楼层
楼主呀,为了学习您的代码我专门申请了个账号。可以麻烦您给我发一份代码,非常感谢
我邮箱1452919062@qq.com
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-27 20:46

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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