OpenEdv-开源电子网

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

STM32F4,OV2640图像提取处理并传到LCD,遇到问题,求解惑~····

[复制链接]

4

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2015-11-17
在线时间
10 小时
发表于 2015-11-17 21:54:45 | 显示全部楼层 |阅读模式
5金钱
STM32F407,OV2640,是按照例程里摄像头实验(库函数版)改的。目的是从摄像头提取RGB565的数据,处理之后,传到LCD屏。采用的是RGB565,320*240分辨率。
我现在到了这一步:将RGB565通过DMA提出来放到一个数组fps(由于sram有限,采取的是行中断,每次显示一行的图像),再将这个数组传到LCD上。
先上代码(改动了main.c与DCMI.c):
1.下面是中断函数,设置了全局变量extern int cnt; 快照模式,开行中断与帧中断,
[mw_shl_code=c,true]void DCMI_IRQHandler(void) { if(DCMI_GetITStatus(DCMI_IT_FRAME)==SET) { DCMI_ClearITPendingBit(DCMI_IT_FRAME); } if(DCMI_GetITStatus(DCMI_IT_LINE)!=RESET)//捕捉到一行数据,使能此中断 { jpeg_data_process(); //grb565处理,将数据写到LCD屏,函数在main.c DCMI_ClearITPendingBit(DCMI_IT_LINE);//开中断 DCMI_CaptureCmd(ENABLE); } if(DCMI_GetITStatus(DCMI_IT_VSYNC)!=RESET)//帧中断 { cnt=0; //,全局变量,第cnt行,一幅图显示完置零 DCMI_ClearITPendingBit(DCMI_IT_VSYNC);// DCMI_CaptureCmd(ENABLE); LED1=!LED1; } } [/mw_shl_code] [mw_shl_code=c,true][/mw_shl_code]
[mw_shl_code=c,true]//下面是在main.c里[/mw_shl_code] [mw_shl_code=c,true]void jpeg_data_process(void) //在例程基础上修改,此函数功能是将存放图像数据的数组一个个显示在LCD上 { int i; if(ov2640_mode==0)//RGB565模式下 { for(i=1;i<320;i++) { LCD_SetCursor(320-i,cnt);                      LCD_WriteRAM_Prepare();         LCD->LCD_RAM=fps; }                                    写第cnt行图像到LCD cnt++; //下一行做准备 } }[/mw_shl_code]
[mw_shl_code=c,true]void rgb565_test(void) { LCD_Clear(WHITE); POINT_COLOR=RED; OV2640_RGB565_Mode(); / My_DCMI_Init(); // DCMI_DMA_Init((uint32_t)fps,320,DMA_MemoryDataSize_HalfWord,DMA_MemoryInc_Enable);//DCMI到数组fps,而不是例程里的直传到LCD[/mw_shl_code] [mw_shl_code=c,true] OV2640_ImageSize_Set(1600,1200); OV2640_ImageWin_Set(0,0,1600,1200); OV2640_OutSize_Set(320,240); DCMI_Start(); while(1)     {     } } [/mw_shl_code]

按理来说,我得到的图应该是320*240的,结果出来是:


横的是320是对的,竖行的绝对没有240.。。大概就是60多。

我调试了好久,试了很多种方法,最后大概明白为什么,但比较模糊,先上两张对比图
下面第一张是OV2640_OutSize_Set(320,1200);的图片,第二张是OV2640_OutSize_Set(60,240);的图片


其中60*240的图片可以显示240行。我初步推断是我用数组写LCD数据所花的时间过长,摄像头采集过快,所以导致不能完全写240行。

问题是:我不知道接下来要怎么做?
1.能不能摄像头扫描的时候每一次DCMI行中断,传感器暂停扫描,等我处理完了再继续扫。
2.在网上也找了别人的做法,我这有可能是速度不匹配, 我想用FIFO开大一点,但在dcmi.c里,FIFO是已经全开的了。。
不知道我的思路对不对,已经卡在这里很久很久了,上面要进度,我的进度太慢了。。
因为初学就要赶着做这个,很多都是要用到哪个才学哪个的。希望有会的大哥大姐能帮我看看,是我代码有问题还是哪里没设置好,万分感谢了!!!!

最佳答案

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

先不做处理,看正常不。 然后一步步改。
大写的人。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-11-17 21:54:46 | 显示全部楼层
先不做处理,看正常不。
然后一步步改。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2015-11-17
在线时间
10 小时
 楼主| 发表于 2015-11-17 21:54:46 | 显示全部楼层
找到原因,就是速度不匹配,每行刷的太快了,处理速度太慢。修改了jpeg_data_process,现实成功。之后加上算法,算法一复杂它就最后几行刷不出来
大写的人。
回复

使用道具 举报

4

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2015-11-17
在线时间
10 小时
 楼主| 发表于 2015-11-18 07:49:39 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
我就是不做处理的,直接把从摄像头获得的数据一行行传给LCD的,然后就出现上面情况了。。
大写的人。
回复

使用道具 举报

2

主题

17

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2015-11-10
在线时间
0 小时
发表于 2015-11-20 11:18:11 | 显示全部楼层
回复【4楼】mandy_0:
---------------------------------
您好,可以代码共享一下吗。最近也在做这个。焦头烂额,如果看到的话谢谢发一份代码参考。962756843@qq.com
回复

使用道具 举报

4

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2015-11-17
在线时间
10 小时
 楼主| 发表于 2015-11-20 15:47:33 | 显示全部楼层
回复【5楼】马小跳life:
---------------------------------
你急着要吗 我代码在公司写的,要回去腾
大写的人。
回复

使用道具 举报

2

主题

17

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2015-11-10
在线时间
0 小时
发表于 2015-11-21 13:22:45 | 显示全部楼层
回复【6楼】mandy_0:
---------------------------------
谢谢你,我看了你发帖子的东西,一些问题已经解决了。但看你的帖子你是一行读取一次数据,然后直接显示。我是把数据所有的读出来之后,再做处理的。在像素不高的情况下,DMA最大一次65535.我输出的像素分辨率是CIF是101376个像素点,比你的还大,但是是32位传输,折半之后事50688比65535要小,所以可以一帧接收完所有的像素,再打印。建议你也一帧结束之后再处理
回复

使用道具 举报

4

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2015-11-17
在线时间
10 小时
 楼主| 发表于 2015-11-25 21:26:08 | 显示全部楼层
回复【7楼】马小跳life:
---------------------------------
我的摄像头上周五坏了。。。 拿去修了,等送回来了我试试你的方法,交流交流~····
大写的人。
回复

使用道具 举报

2

主题

17

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2015-11-10
在线时间
0 小时
发表于 2015-11-26 23:22:36 | 显示全部楼层
回复【8楼】mandy_0:
---------------------------------
可以哦
回复

使用道具 举报

4

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2015-11-17
在线时间
10 小时
 楼主| 发表于 2015-11-30 15:46:29 | 显示全部楼层
回复【9楼】马小跳life:
---------------------------------
哈喽,我试了用祯中断做处理,图像是320*240,隔行采集,Rgb565模式,那么我的数组是320*240/2*16bit=75k字节,而sram是115k字节,数据提取并直接显示是可以的,但是要进行二值化处理的话还需要一个同样大的数组来存二值化后的数据,这样sram就不够了。。我在板子上也试了,加二值化数组后跑不动,你有什么好方法吗~
大写的人。
回复

使用道具 举报

2

主题

17

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2015-11-10
在线时间
0 小时
发表于 2015-12-1 16:50:29 | 显示全部楼层
回复【10楼】mandy_0:
---------------------------------
你要二值化干嘛呀,数据得到了还要二值化。我不太懂哦,可不可以每个数据二值化之后覆盖在原来数组里
回复

使用道具 举报

4

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2015-11-17
在线时间
10 小时
 楼主| 发表于 2015-12-2 23:14:23 | 显示全部楼层
因为我要对图像及进行处理,提取数据只是第一步。因为还要原图显示出来在LCD上,所以不能覆盖
图像处理的话比如识别圆、直线等,还有手势识别等功能,还在慢慢弄呢。。
二值化其实是比较当前像素点和阀值的大小关系,我不用数组,直接比大小判断也可以,在研究怎么识别圆心。。
大写的人。
回复

使用道具 举报

7

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2015-11-16
在线时间
2 小时
发表于 2016-1-25 08:54:40 | 显示全部楼层
本帖最后由 philip5966 于 2016-1-25 08:55 编辑
mandy_0 发表于 2015-11-30 15:46
回复【9楼】马小跳life:
---------------------------------
哈喽,我试了用祯中断做处理,图像是320*240, ...

320*240的图片应该是150k吧,ov2640,RGB565不是一个像素两个字节吗?
320*240*2/1024=150.对吗,不作处理也不够吧。。
回复

使用道具 举报

12

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
107
金钱
107
注册时间
2013-9-4
在线时间
8 小时
发表于 2016-3-22 09:53:06 | 显示全部楼层
我弄STM32F429+OV2640搞得焦头烂额,还是现实不出来图片,可以加我QQ742976921帮帮我吗?
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2016-4-20
在线时间
3 小时
发表于 2016-4-25 20:41:12 | 显示全部楼层
请问楼主还在吗?我最近刚开始学。也想二值化,搞得焦头烂额,不知道楼主能不能发我一份源代码参考一下?154102375@qq.com。非常感谢
回复

使用道具 举报

2

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2016-3-25
在线时间
17 小时
发表于 2016-4-30 21:32:29 | 显示全部楼层
怎么样吧OV2640 的速度变慢,是更改帧采集率吗,而且
u16 RGB(u8 R,u8 G,u8 B)
{
        return((u16)(R&0XF8)<<8|(u16)(G&0XFC)<<3|(u16)(B&0XF8)>>3);
}
这句代码怎么用
回复

使用道具 举报

2

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2016-3-25
在线时间
17 小时
发表于 2016-5-1 22:05:36 | 显示全部楼层
马小跳life 发表于 2015-11-21 13:22
回复【6楼】mandy_0:
---------------------------------
谢谢你,我看了你发帖子的东西,一些问题已经解决 ...

你好 我也遇到了上面的问题 数据存到了外部SRAM里然后再搬运到显示屏就不显示图像 ,看楼上说速度不匹配 那DMA的速率在哪里改啊。是时钟吗。
从摄像头到外部SRAM和从SRAM到LCD可以用一个DMA流吧
回复

使用道具 举报

1

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2016-5-10
在线时间
19 小时
发表于 2016-5-12 21:56:17 | 显示全部楼层
楼主解决了吗  我也是这个问题
回复

使用道具 举报

2

主题

17

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2016-3-20
在线时间
12 小时
发表于 2016-6-3 09:37:15 | 显示全部楼层
楼主,还在吗,能发给我一份你的代码吗?我最近在做这个,谢谢啦,非常感谢
回复

使用道具 举报

2

主题

17

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2016-3-20
在线时间
12 小时
发表于 2016-6-3 09:39:13 | 显示全部楼层
忘了邮箱。2415266805@qq.com。谢谢
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2016-6-15
在线时间
1 小时
发表于 2016-6-15 17:43:01 | 显示全部楼层
楼主 你好 我现在也在做STM32F4+OV2640二值化的 这周要交任务 由于基础有点差 搞得焦头烂额 楼主可否把代码分享一下 非常感谢 ! 我的邮箱947855377@qq.com
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2016-7-4
在线时间
4 小时
发表于 2016-7-4 09:20:23 | 显示全部楼层
楼主还在吗能不能把你的代码发给我一份看看邮箱1326539105@qq.com
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2016-7-20
在线时间
1 小时
发表于 2016-7-20 20:45:28 | 显示全部楼层
您好,我有个问题想请教您一下,我在用32F407ZGT6处理摄像头采回来发到LCD上,最后现象是LCD出现3*5的分屏,这是怎么回事呢?
回复

使用道具 举报

35

主题

309

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2641
金钱
2641
注册时间
2016-8-10
在线时间
470 小时
发表于 2016-8-13 09:43:18 | 显示全部楼层
探索者stm32f4摄像头  DCMI传输数据问题
http://www.openedv.com/forum.php ... 1&fromuid=62304
(出处: OpenEdv-开源电子网)
我最近也在弄这个,你可以发一份源程序给我看看吗?多谢!邮箱:952562875@qq.com
回复

使用道具 举报

4

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2015-11-17
在线时间
10 小时
 楼主| 发表于 2016-8-22 12:06:31 | 显示全部楼层
飞奔的金色麦田 发表于 2016-7-20 20:45
您好,我有个问题想请教您一下,我在用32F407ZGT6处理摄像头采回来发到LCD上,最后现象是LCD出现3*5的分屏 ...

开窗多设置几种看看,我之前好像是没有配置好,顺序好像也有要求;公司电脑数据发不出去,没外网,不然我也很想分享下代码
大写的人。
回复

使用道具 举报

0

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2015-11-23
在线时间
20 小时
发表于 2016-8-31 22:58:24 | 显示全部楼层
先不做处理,看正常不。
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
25
金钱
25
注册时间
2016-10-9
在线时间
5 小时
发表于 2016-10-9 10:09:40 | 显示全部楼层
请问能共享一下你的代码吗?想实现通过F7把OV2640的图像显示在LTDC上,然而失败了,求参考代码,不胜感激!496422975@qq.com
回复

使用道具 举报

1

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2014-1-5
在线时间
12 小时
发表于 2017-2-17 18:19:36 | 显示全部楼层
求代码
回复

使用道具 举报

4

主题

15

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2017-2-20
在线时间
8 小时
发表于 2017-2-20 16:06:13 | 显示全部楼层
mandy_0 发表于 2015-12-2 23:14
因为我要对图像及进行处理,提取数据只是第一步。因为还要原图显示出来在LCD上,所以不能覆盖
图像处理的话 ...

楼主,能不能把你的代码发给我看一下啊?449301571@qq.com

我回学校就要做比赛,就是要做图像处理二值化

好几天了我一直找不到该在哪里改数据。

能的话发一下  谢谢了~
回复

使用道具 举报

3

主题

7

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2017-3-15
在线时间
8 小时
发表于 2017-3-25 22:06:58 | 显示全部楼层
mandy_0 发表于 2015-11-17 21:54
找到原因,就是速度不匹配,每行刷的太快了,处理速度太慢。修改了jpeg_data_process,现实成功。之后加上 ...

怎么改的,能发一下吗?
回复

使用道具 举报

5

主题

31

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
271
金钱
271
注册时间
2016-3-23
在线时间
49 小时
发表于 2017-3-31 16:01:34 | 显示全部楼层
你好,可以发一份吗,最近在做这个,好纠结呀,172538999@qq.com  多谢了
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2017-5-26
在线时间
1 小时
发表于 2017-5-26 19:53:29 | 显示全部楼层
您好,刚学32不久。我把您上面的函数移植到库函数的例程去出现了图像模糊的现象。我想请问一下您32位的DCMI->DR数据传送到16位LCD->LCD_RAM。您是怎么处理的。我怀疑我的数据丢失了。能否解答一下。谢谢C:\Users\bob\Documents\Tencent Files\825190624\FileRecv\MobileFile\thumb
回复

使用道具 举报

8

主题

20

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2017-7-18
在线时间
10 小时
发表于 2017-7-24 14:29:30 | 显示全部楼层
你好,可以发一份吗,最近在做这个,好纠结呀,1215511720@qq.com  多谢了
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2017-7-29
在线时间
3 小时
发表于 2017-7-29 21:58:33 | 显示全部楼层
你好,快要参加比赛了,最近在作摄像头的实验,能发一份有关二值化源码吗。1003730640@qq.com  谢谢了
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2017-8-4
在线时间
0 小时
发表于 2017-8-4 16:22:19 | 显示全部楼层
@正点原子 原子大大,例程上32位的DCMI->DR数据传送到16位LCD->LCD_RAM,不会发生数据丢失吗?在传送的过程中LCD->LCD_RAM地址递增了两次?
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2017-7-17
在线时间
8 小时
发表于 2017-8-4 16:58:07 | 显示全部楼层
我把4.3寸屏幕地址对应的长度和宽度,,改成了2.8寸的,在屏幕左上角显示图像,图像还是比较清楚地,,就是其他地方一直有灰色雪花,,还不能在用来显示其他字体了,,原子大哥求救啊@正点原子 ,,我用的F103
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2017-11-20
在线时间
8 小时
发表于 2018-9-14 16:59:41 | 显示全部楼层
你好  能发我一份代码吗1072688402@qq.com
回复

使用道具 举报

0

主题

3

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2018-6-4
在线时间
14 小时
发表于 2019-3-20 13:16:19 | 显示全部楼层
楼主 我也遇见这种情况了  您是怎么解决的  求告知啊
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2019-3-31
在线时间
3 小时
发表于 2019-4-3 23:17:04 | 显示全部楼层
大佬,为什么我按你代码改了以后,输出的图像变了qaq
回复

使用道具 举报

2

主题

32

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2019-4-5
在线时间
6 小时
发表于 2019-4-5 22:36:47 | 显示全部楼层
this is a test
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2019-4-3
在线时间
4 小时
发表于 2019-4-7 15:30:30 | 显示全部楼层
xiaoloveyao 发表于 2016-3-22 09:53
我弄STM32F429+OV2640搞得焦头烂额,还是现实不出来图片,可以加我QQ742976921帮帮我吗?

兄弟,你弄出来了吗,我现在也是做这个,如果有源码,请发邮箱2294012524@qq.com,谢谢
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2019-4-3
在线时间
4 小时
发表于 2019-4-7 15:31:12 | 显示全部楼层
Linx 发表于 2017-2-20 16:06
楼主,能不能把你的代码发给我看一下啊?

我回学校就要做比赛,就是要做图像处理二值化

兄弟,你弄出来了吗,我现在也是做这个,如果有源码,请发邮箱2294012524@qq.com,谢谢
回复

使用道具 举报

0

主题

164

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
204
金钱
204
注册时间
2019-4-2
在线时间
4 小时
发表于 2019-4-9 09:11:10 | 显示全部楼层
谢谢分享!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-10 13:11

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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