OV摄像头图像采集

最近研究了几种摄像头的图像采集,有点心得,小记于此。

使用过的摄像头大多是OV芯片场商生产的。也有使用过模拟摄像头,不过模拟摄像头的图像是直接显示出来的,没有转换为数字形式在MCU中处理。而数字式的摄像头有串口采集(LSY201)的,有FIFO(野火 OV7725火眼)的,也有直接芯片输出进行采集(DEMOK OV7620)的。这里主要研究芯片直接输出采集。

作者一般使用的都是OV7620,数据是芯片直接输出的,没有经过处理。所以输出速率较快,60场每秒,30帧每秒。为了完成如此快的数据采集,使用的是飞思卡尔的K60,超频至200MHz。场、行各触发一个GPIO口的中断。在场中断服务子程序中清零行数,并为场数加1。而在行中断中,开始DMA采集,一次采集固定数目的像素点。

细心的读者可以明显的发现,我们并没有把所有的图像数据都采集进来,我们是挑选特定的行数来进行采集的。我们实验室的一位大牛曾指出使用中断,会大量消耗CPU的资源,不如一次全部采集了,再进行处理。而且,全部采集下来的话,RAM也是足够使用的。这说得不无道理,但挑选行数来进行采集也有其方便之处,在消除图像的桶形效应方面还是十分方便有效的。此外,OV7620是隔行采集的,也就是分奇、偶场的,我们两场其实只是一帧。实验室的大牛指出,奇、偶场的图像是一样的,根本不需要对两场图像都进行处理。这个问题也困扰了我许久,这意味着说是16ms一场图像,但其实32ms左右才更新一次图像,在智能车这种短周期控制情形下还是有不利的地方的。但从另一方面来讲,以智能车极限速度4米/秒来计,4*0.032=0.128m,而且还有摄像头所独有的那么远的前瞻,感觉上(只能是感觉了)还是足够使用的。

OV7620采集过程中发现,在右边缘有一列采集会出现问题,即最后一列应该是第一列,这应该是DMA的速度慢于摄像头传感器的数据输出,解决方法就是减少每一行的像素采集点数,比如原来是采集160个点,则可以降低到158,或更少,直到错误列的消失。

此外,在使用实验室大牛自制的OV7725摄像头时发现,如果没有在引脚上开启滤波,采集到的图像会出现极大的抖动。一方面,可以认为,增加滤波可以提升图像采集的稳定性,从另一方面也可以体现出摄像头模块制作的好坏也会影响图像采集的效果。所以购买优质的摄像头模块以获得更佳的性能,减少不必要的麻烦,也是值得注意的一点。

OV7620不带滤波与OV7725带滤波代码:

 

未经允许不得转载:TacuLee » OV摄像头图像采集

赞 (1)

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址