OV5640摄像头帧率配置

描述

从网上得到很多资料,很多地方或多或少的懵逼,但总算有所收获,如今便简单的把收获一点一点总结出来。

帧率 :板球我们很快就搭出来了 但苦于摄像头帧率不高,于是系统必然会有很大的滞后性,即便是调串级PID也着实令人不爽

OV5640窗口

不知为何,前几天搜索,只能搜到这样一个问题,这张图象是什么意思

其实很简单,我们拿大家手上都有的正点案例来讲

 

//设置窗口的函数有两个,第一个大家都会用就不贴详细了,就是设置输出图像的大小,左右上下偏移量

u8 OV5640_OutSize_Set(u16 offx,u16 offy,u16 width,u16 height){}

//第二个相信有文章标题疑惑的一般都不会用,因为如果直接在别人模块上盲改的话,这个函数不会起作用

u8 OV5640_ImageWin_Set(u16 offx,u16 offy,u16 width,u16 height)

{

u16 xst,yst,xend,yend;

xst=offx;

yst=offy;

xend=offx+width-1;

yend=offy+height-1;

OV5640_WR_Reg(0X3212,0X03);

OV5640_WR_Reg(0X3800,xst>>8);

OV5640_WR_Reg(0X3801,xst&0XFF);

OV5640_WR_Reg(0X3802,yst>>8);

OV5640_WR_Reg(0X3803,yst&0XFF);

OV5640_WR_Reg(0X3804,xend>>8);

OV5640_WR_Reg(0X3805,xend&0XFF);

OV5640_WR_Reg(0X3806,yend>>8);

OV5640_WR_Reg(0X3807,yend&0XFF);

OV5640_WR_Reg(0X3212,0X13);

OV5640_WR_Reg(0X3212,0Xa3);

return 0;

}

 

我们仔细看一下这个从未用过的函数,它所操作的寄存器的位置不就是与之前的贴图一一对应。

简单描述一下:

如果0x3800,0x3801,0x3802,0x3803都给0,也就是左边界和上边界都从零开

0x3804,0x3805代表摄像头拍摄的宽,比如分别给0x0a, 0x3f就代表摄像头捕捉宽度为2623

0x3806,0x3807代表摄像头拍摄高:比如0x07, 0x9f就代表捕捉高度为1951

0x3810,0x3811,0x3812,0x3813前后两个分别代表刚才2623,1951想要裁剪的宽长

如此便得到了一整张图像,比较大张,细节,但这显然不是单片机接收到的

后续0x08,0x09,0x0A,0x0B,前后分别代表预设目标图像大小,而这张图像是根据上述摄像头图像缩放而来。

最后单片机得到的图像就是它了,你二值化,连通域等等都是在此基础之上。

最后,这些位操作很多地方都有,要改就把之前相关的都删去,不然最后重复乱操作只能是花屏

帧率

ov5640.c的包含文件中的#include “ov5640cfg.h”

open之后,找到第二个函数 也就是 rgb565模式,也可以改第一个函数jpeg模式的,各取所取

直接改动寄存器0x3035,0x3035 的值

我们打开一个定时器,显示一下帧中断次数

举例:

0x3035=41,0x3036=69;//15帧

0x3035=21,0x3036=ac;//50帧

0x3035=21,0x3036=69;//100帧

各取所需 ,只写一次

最后帧数并非越高越好,改成自己实用的最佳。极度扩大帧率的同时别忘了减下图像面积,优化下算法。

 

  审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分