ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

OV7670图像传感器详解:从内部结构到SCCB配置,嵌入式图像采集入门基础

OV7670图像传感器详解:从内部结构到SCCB配置,嵌入式图像采集入门基础 如果你第一次接触图像采集大概率绕不开OV7670这颗摄像头传感器。“基于STM32OV7670的图像采集系统”几乎是国内各大电子竞赛、毕业设计和嵌入式入门教程里出现频率最高的组合没有之一。原因很简单OV7670够便宜、够经典、资料够多STM32又是绝大多数人单片机进阶的必经之路两者搭配既能让你把DCMI、SCCB、DMA、FIFO这些嵌入式图像采集的关键词一次摸清又能真实地把一帧图像数据抓回来显示在屏幕上成就感非常直接。这篇基础篇只讲一件事OV7670本身。我会把它的内部结构、关键参数、输出格式、引脚定义、控制方式以及那些新手最容易踩的坑全部拆开讲清楚。至于STM32端怎么初始化DCMI、怎么写SCCB驱动、怎么用DMA搬运数据那是进阶篇的内容这篇先把传感器这颗“眼睛”彻底吃透。适合刚准备做图像采集项目、或者已经在调OV7670但总是不出图的同学看完至少能少走两个礼拜弯路。1. OV7670到底是个什么样的传感器1.1 入门图像采集为什么总碰它OV7670是美国豪威科技OmniVision推出的一颗CMOS图像传感器1/6英寸光学尺寸有效像素阵列30万级别最大支持VGA分辨率640x480。放在今天看这个参数连手机前置摄像头的零头都比不上但它在嵌入式学习圈的地位一直没掉主要是因为三点第一控制接口简单。它用SCCB总线兼容I2C配置寄存器总共就一百多个寄存器虽然是英文手册但网上中文资料铺天盖地基本上你能遇到的配置问题都有前人踩过坑。第二数据输出形式灵活。它既能输出RGB565、RGB555、RGB444这些方便单片机直接处理的格式也能输出YUV422、YCrCb422甚至还能输出Bayer RAW格式给FPGA或者DSP做ISP后期处理。对于STM32这种没有内置ISP的单片机来说RGB565是默认最优解两个字节一个像素直接往LCD上怼就完事了。对于一些需要进一步做颜色识别的项目还可以换成YUV422把Y分量提取出来做灰度图。第三帧率够用。VGA分辨率下最高能跑30fpsQVGA320x240下能跑60fps。对于做颜色识别、形状识别、二维码定位这类基础视觉任务来说30fps已经完全够用再高反而会给STM32的后续处理增加压力。OV7670的作用简单说就是把镜头前面的光信号变成数字信号通过并行数据总线送出去。它本身不做任何图像识别、不做存储纯粹是一个“感光转换”的前端设备相当于人的视网膜而STM32是大脑皮层DMA是视神经通路LCD是视觉皮层。基础篇的核心任务就是搞懂“视网膜”是怎么工作的。1.2 内部结构拆解虽然OV7670对外就是一个24pin左右的芯片但内部其实是一个完整的SoC系统感光阵列由30万个像素单元组成每个像素单元包含一个微透镜、一个彩色滤光片CFA和一个光电二极管。光线经过微透镜汇聚滤光片只允许特定波段的光通过R、G、B光电二极管把光强转换成电压信号。模拟信号处理链包括相关双采样CDS、自动增益控制AGC和模拟数字转换ADC。相关双采样是用来消除固定模式噪声的原理是每个像素先读一次复位电平再读一次曝光电平两者相减把晶体管本身的失调电压抵消掉。OV7670内部的ADC是10位的也就是每个像素的原始亮度被量化成0到1023。数字信号处理这个是OV7670比较良心的地方——它内部集成了一部分ISP功能包括自动曝光AEC、自动白平衡AWB、自动增益控制AGC、伽马校正、饱和度调整、边缘增强等。你在手册里看到的那些寄存器比如0x10AEC、0x24AWB就是控制这些ISP模块的。FIFO控制器注意不是所有版本都有OV7670原版没有内置FIFO但市场上很多卖OV7670的模块都外挂了一片AL422B FIFO芯片也就是常说的“带FIFO版本”用来暂存一帧数据。不带FIFO的版本则直接把D0-D7数据线引出来靠VSYNC、HREF、PCLK这三个同步信号“裸传”数据。这两种版本在接线和驱动方式上有本质区别后面专门说。了解内部结构有什么用最大的用处在排错。比如你图像偏色不是传感器坏了很可能是AWB没配好或者RGB通道顺序不对图像太暗不是补光不够可能是AGC和AEC寄存器被默认值限制住了图像有横条纹可能是电源纹波过大或者PCLK采样时序不对。这些问题只有在理解内部结构的基础上才可能快速定位。2. 核心参数逐个说清楚2.1 分辨率、帧率还有窗口OV7670支持的分辨率主要有这么几个档位VGA640x480、QVGA320x240、CIF352x288、QCIF176x144另外还能输出更小的40x30等分辨率用于人脸检测之类的特殊用途不过实际项目里基本用不到。分辨率和帧率是互相牵制的而决定帧率上限的除了传感器本身的能力还有你的系统时钟。OV7670的像素时钟PCLK由内部时钟分频而来输入时钟XCLK越高PCLK理论上限也越高。XCLK官方建议范围是10MHz到48MHzSTM32常见配置是用24MHz的晶振或者直接用STM32的MCO引脚输出24MHz。当XCLK为24MHz时VGA分辨率下输出PCLK频率约为12MHz对应的帧率约24fpsXCLK提高到48MHz只有部分版本支持PCLK约24MHz帧率能接近30fps上限。实际上很多人用24MHz XCLKVGA实测帧率在15到20fps之间已经能满足绝大多数静态场景采集。窗口Window的概念也值得说一下。OV7670的感光阵列实际有效像素是656x488输出VGA的时候是在这个阵列上开一个640x480的窗口加上上下左右的blanking区域形成完整的帧时序。你可以通过窗口寄存器0x17、0x18、0x19、0x1A等 来移动窗口位置或者改变窗口大小。这个功能在你想裁剪画面、或者和镜头模组对位的时候非常有用。比如你换了一个视场角偏小的镜头画面四周可能出黑边这时候就可以用窗口寄存器把采集区域缩小只取画面中心部分。帧率的分频公式可以通过寄存器0x11CLKRC配置内部主时钟 XCLK / (CLKRC[7]的倒数行为 1)然后再经过分频得到PCLK。CLKRC的默认值是0x01也就是XCLK不分频直通。如果你觉得图像采集速度太快导致STM32处理不过来不需要改硬件直接改这个寄存器把PCLK分频就行代价是帧率下降。2.2 输出格式RGB565才是STM32的菜OV7670的数据输出格式种类很多但STM32这类不带专用ISP接口的单片机实际可用的就两种RGB565和YUV422也叫YUYV。RGB565就是用两个字节表示一个像素高字节的前5位是红色中间6位是绿色低字节的后5位是蓝色。公式是R (data_high 3) 0x1F换算成8位就是 R (data_high 0xF8)G ((data_high 0x07) 5) | ((data_low 3) 0x1C)换算后才能得到8位GB data_low 0x1F换算成8位就是 B (data_low 3) 0xF8如果用的是带LCD的STM32开发板LCD屏本身如果也是RGB565接口那么OV7670输出的RGB565数据可以直接通过DMA搬运到LCD的GRAM中间不需要任何颜色空间转换速度飞快。这也是为什么很多教程推荐RGB565的原因。YUV422格式每两个像素占4个字节排序是Y0 U0 Y1 V1Y是亮度U/V是色度。这种格式的好处是Y分量就是灰度图做灰度识别直接取每两个字节里的Y即可省去RGB转灰度的计算量。坏处是STM32的LCD屏几乎不直接支持YUV输入如果你一边采集一边实时显示就得在MCU里做YUV到RGB565的转换代码不算复杂但会吃掉不少CPU时间。这里要特别提醒一点OV7670输出RGB565时像素字节顺序可以通过寄存器控制默认可能是RGB565还是BGR565取决于0x12COM7寄存器中RGB565的bit设置和0x4A寄存器的RGB444/RGB565行为位。实际项目中经常出现“颜色对调”的诡异现象——红色显示成蓝色绿色正常这种情况下不要怀疑传感器坏了先检查RGB通道顺序。我在调试时踩过这个坑折腾了两天最后发现是寄存器配置里RGB和BGR顺序写反了。2.3 像素时钟、VSYNC和HREF那条三角关系OV7670的三个同步信号是理解整个数据采集流程的关键VSYNC垂直同步帧同步信号一帧图像开始或者结束时输出一个脉冲。OV7670默认是VSYNC高电平有效可配置成低电平有效也就是说VSYNC拉高再拉低代表新的一帧开始了。HREF水平参考行同步信号高电平期间表示当前这一行正在输出有效像素数据。640个有效像素对应的就是HREF为高期间输出的640个PCLK周期。PCLK像素时钟每个上升沿或下降沿输出一个像素的数据可以配置成上升沿有效或下降沿有效。PCLK频率越高单位时间输出的像素越多。对应关系是VSYNC脉冲 → 一帧开始 → 每行HREF拉高 → HREF高电平期间PCLK每个有效边沿把D0-D7数据总线上的值打入 → HREF拉低一行结束。行与行之间有HBANK水平消隐帧与帧之间有VBANK垂直消隐这些消隐区是为了给传感器内部复位和曝光留时间。STM32端采集的时候有两种方式一种是直接用DCMI外设DCMI自己就能识别VSYNC和HREF配合DMA把数据搬走另一种是纯GPIO模拟用外部中断检测VSYNC再用定时器输入捕获检测HREF和PCLK这种方法虽然慢但可以加深理解。不管哪种方式你都必须在代码里清晰地知道当前处于哪个阶段等VSYNC、等HREF、在像素流中。很多新手“不出图”的原因其实就是这三者的时序关系没理清导致数据错位、图像撕裂。3. 引脚和硬件连接要点3.1 引脚功能一览OV7670模块常见的引脚如下引脚名方向功能说明VCC电源2.5V-3.0V典型3.0V有些模块板载稳压后可接3.3VGND电源地SIOC输入SCCB时钟线类似I2C的SCLSIOD双向SCCB数据线类似I2C的SDARESET输入复位引脚低电平有效低脉冲复位PWDN输入掉电控制高电平睡眠低电平正常工作XCLK输入系统时钟输入10-48MHz典型24MHzPCLK输出像素时钟输出VSYNC输出帧同步信号HREF输出行有效信号D0-D7输出8位并行像素数据如果是带FIFO的模块还会多出FIFO相关的引脚比如FIFO_WRST写复位、FIFO_RRST读复位、FIFO_WEN写使能、FIFO_RCK读时钟、FIFO_OE输出使能等而且VSYNC、HREF、PCLK这些信号不会直接引出来被FIFO内部消费掉了取而代之的是FIFO_D0-D7、FIFO_RCK、FIFO_RRST等。这个区别在接线的时候一定要注意很多人拿到模块发现引脚对不上就是因为版本不同。3.2 电源和去耦最容易翻车的地方OV7670的模拟电源AVDD和数字电源DVDD虽然模块上一般都已经处理好但如果你是从传感器芯片裸片开始自己画板子就必须注意AVDD要单独用LC或RC滤波不能直接和DVDD并在一起。CMOS图像传感器对电源纹波极其敏感尤其是PCLK和模拟信号链路的供电纹波一超标图像就会出现周期性横条纹或者雪花噪点。供电能力也要算一下。OV7670正常工作电流大约30-40mA上电瞬间会有浪涌而且很多模块上还带着一个AL422B FIFO芯片工作电流约20mA和一颗稳压LDO总电流可能达到60-80mA。如果用STM32开发板的3.3V引脚直接给传感器模块供电虽然大部分情况下能扛住但建议尽量从电源芯片的独立一路输出取电或者在模块电源引脚旁并联一个100uF电解电容和两个100nF、10nF陶瓷电容做三级去耦。实测下来电源这块的稳定性直接决定了图像质量和调试时候的心态。我见过一个案例图像总是间歇性闪动排查到最后是供电线太长、压降太大导致的复位不稳换成粗短线后彻底解决。时钟信号XCLK的质量也值得关注。如果XCLK抖动过大PCLK会跟着抖动最终表现为图像边缘毛刺或者行错位。用STM32的MCO引脚输出24MHz时钟时要注意MCO的输出驱动能力有限如果走线很长或者线上接了其他负载波形会变形。稳妥做法是让MCO直连OV7670的XCLK不要在这条线上再接别的东西。4. SCCB控制总线把传感器调校成你想要的样子4.1 SCCB和I2C的关系OV7670的寄存器读写是通过SCCBSerial Camera Control Bus协议完成的。SCCB本质上就是I2C的一个变种OmniVision自己搞的协议兼容性方面略微有一些差异。具体来说起始条件SIOC高电平期间SIOD从高拉低表示起始条件。停止条件在SIOC高电平期间SIOD从低拉高表示停止条件。数据有效性SIOC高电平期间SIOD上的数据必须保持稳定SIOC低电平期间SIOD可以变化。应答SCCB要求每个字节后跟一个应答位但注意读操作时的“无关应答位”处理和标准I2C略有不同部分严格实现会出问题。大多数STM32的I2C硬件外设可以直接用来读写OV7670但网上大量教程都选择用GPIO模拟I2C来实现SCCB。原因主要有几个STM32老款标准库的I2C硬件外设问题比较多很多人被折磨过GPIO模拟实现灵活方便在线调试OV7670寄存器读写频率不高模拟I2C完全够用。不过新版的HAL库I2C已经相当稳定直接开硬件I2C也没问题。我个人习惯用软件模拟因为移植性好从STM32F103换到GD32或者ESP32都不用改代码核心逻辑。OV7670的8位器件地址是0x42写/0x43读这是固定不可改的除非是OV7675之类的变种。写寄存器操作是起始 → 发送0x42 → 等待ACK → 发送寄存器地址 → 等待ACK → 发送数据 → 等待ACK → 停止。读寄存器操作稍微复杂起始 → 发送0x42 → 等待ACK → 发送寄存器地址 → 等待ACK → 停止 → 重新起始 → 发送0x43 → 等待ACK → 接收数据 → 发送NACK → 停止。4.2 读回校验新手最容易忽略的重要步骤很多第一次调OV7670的人写了一大堆寄存器配置然后直接傻等出图结果屏幕全黑或者全白然后就开始怀疑传感器坏了。其实第一步应该是读寄存器把你写入的关键寄存器配置读回来看看是不是真的写进去了。比如你要配置0x12寄存器为0x80复位传感器写完以后延时几毫秒再用读操作把0x12的值读出来如果读回的不是0x80说明I2C通信链路有问题或者从机地址不对或者上拉电阻没接。O.V7670模块一般板上自带上拉电阻但如果你自己DIY电路一定要在SIOC和SIOD上加4.7k-10k欧姆的上拉电阻否则通信就是玄学。还有一个容易误判的坑复位寄存器0x12写0x80后传感器会执行软复位寄存器值会被重置为默认值。所以如果你连续执行“写0x80 → 立即读0x12”读回来的可能不是0x80而是0x00。正确做法是软复位后延时然后重新写配置最后再读校验。不要因为这一步顺序搞错了就误判SCCB通信有问题。4.3 初始化顺序不是随便写的OV7670的寄存器配置顺序虽然没有严格的先后依赖但按照经验有一组相对合理的流程。我一般在代码里按这个顺序组织复位传感器0x12 0x80延时50ms以上让内部稳压器和时钟稳定。设置输出格式和分辨率通过0x12、0x0C等寄存器选择RGB565、QVGA或VGA。注意0x12的bit3选择RGB/YUV模式bit2选择RGB565/RGB555bit0也参与分辨率选择。设置时钟分频0x11CLKRC根据你希望的帧率设置。设置图像质量相关0x0D、0x0E、0x0F、0x10、0x24、0x25等寄存器曝光、增益、白平衡、伽马、饱和度等。设置输出窗口0x17、0x18、0x19、0x1A等裁掉边角不需要的像素。最后再写一次0x12确认工作模式正确。重点是不要照抄网上的寄存器表。因为网上的表很多是针对老版本芯片或者带FIFO的模块写的分辨率设置、输出格式可能和你手上的模块不一致。正确做法是下载对应型号的OV7670 datasheet对照寄存器手册逐条核对你要改的位其他的保持默认值。当然如果你用的是一体化模块参考卖家给的初始寄存器表是最高效的。5. 不带FIFO的OV7670才是真正的挑战5.1 带FIFO和不带FIFO版本的本质区别市面上的OV7670模块分成两大流派带FIFO和不带FIFO裸传感器。带FIFO的模块在传感器后面焊了一片AL422B缓存芯片容量384KB刚好能存一帧VGA数据还富余。传感器把图像数据不断写入FIFO单片机不直接面对PCLK/HREF/VSYNC这些时序信号而是等VSYNC触发后通过FIFO的读接口把数据一次性搬走。这种开发方式降低了时序同步的难度特别适合用普通GPIO模拟采集的场景代码写起来相对容易。不带FIFO的模块则是把传感器的PCLK、HREF、VSYNC、D0-D7直接引出来。STM32必须实时同步这些信号用DCMI外设或者GPIO模拟来采样数据。这种方式对时序要求更高但是更接近图像采集的本质也是进阶版玩法。基础篇提到的“OV7670不带FIFO”在热词里出现频率很高说明这是很多人关注的重点后面我会专门讲它的注意点。5.2 不带FIFO版本能直接用DCMI吗STM32的DCMIDigital Camera Interface外设就是为了这种场景设计的。DCMI支持8/10/12/14位并行接口和OV7670的8位数据总线完美对接。DCMI内部有行帧同步检测逻辑可以自动识别VSYNC和HREF配合DMA就可以实现“一帧图像数据自动搬运到内存”的全硬件流程。但这里有一个关键点要注意OV7670的VSYNC默认极性是高电平有效、HREF是高电平有效、PCLK是上升沿采样而 DCMI默认支持的同步信号极性需要配置为对应的有效性。如果DCMI的配置和OV7670的实际输出极性不一致采集到的图像就是歪的、错位的或者花屏。STM32CubeMX里配置DCMI时VSYNC/HREF/PCLK的极性都要选对。如果不带FIFO版本又是自己画的最小系统板没有DCMI外设那基本只能靠GPIO 外部中断去采集但效率很低VGA分辨率24fps的数据量是640x480x2x24约等于14.7MB/sGPIO模拟采根本不可能实时完成。这种情况下要么降分辨率到QVGA甚至QCIF把帧率降到10fps以下要么老老实实换带DCMI的STM32型号F4、F7、H7系列都有。5.3 AL422B该擦的擦该复位的复位如果是带FIFO的模块也有要注意的地方。AL422B虽然省了时序同步的麻烦但引入了FIFO本身的管理问题。AL422B有3个写相关引脚和3个读相关引脚。写端写时钟WCK、写使能WE和写复位WRST读端读时钟RCK、读使能RE和读复位RRST。此外还有输出使能OE和忙信号BUSY。FIFO的读写指针是独立的写指针由传感器数据驱动读指针由STM32控制。经常出现的问题是FIFO读指针和写指针不同步数据错位导致图像斜切或者乱码。正确操作流程是每次VSYNC到来说明新的一帧开始写入FIFO这时候应该“把读指针复位到0然后均匀地把数据读出来”。具体代码逻辑是等待VSYNC上升沿 → 拉低RRST再拉高复位读指针 → 连续读RCK和D0-D7直到一帧数据读完。如果跳过RRST复位步骤读出来的数据就会从FIFO的任意地址开始图像必然错乱。另外一个坑是FIFO读数据是RCK的上升沿采样而且数据有效需要OE为低。有些模块的OE直接接地了有些则要软件控制。如果你发现图像全屏都是乱七八糟的色块先检查OE是不是根本没拉低。6. 图像采集常见问题与排查技巧实录6.1 全黑、全白、花屏先分级定位碰到图像输出不正常很多人的第一反应是改寄存器这其实是大忌。我的排查习惯是先分级定位第一级看SCCB。写一个已知寄存器比如0x12 0x80复位然后读回来确认通信通不通。这一步不过后面全免谈。第二级看同步信号。用示波器或者逻辑分析仪抓VSYNC、HREF、PCLK。正常的时序应该是VSYNC大约每33ms一个脉冲30fpsHREF在每行有效期间频繁翻转PCLK是一串连续的脉冲。如果VSYNC都没有说明传感器没正常工作如果VSYNC有但HREF和PCLK没有大概率是分辨率配置有问题或者PWDN/RESET引脚状态不对。第三级看数据。数据线D0-D7上的数据和PCLK边沿是否对齐。把示波器探头同时接D0和PCLK增大时基看正常情况下D0的电平变化应该是和PCLK边沿相关的规律信号。如果D0一直是高或一直是低传感器根本没输出有效像素。这套三级排查法能解决90%的基础问题。6.2 图像偏绿或者偏紫是什么原因OV7670输出的Bayer RAW数据在经过内部ISP处理后会变成RGB/YUV输出。如果输出的图像整体偏绿首先要检查白平衡。OV7670的自动白平衡AWB默认可能是关闭的你需要在寄存器0x24写0x75之类的使能值或者手动设置RGB增益。偏紫偏蓝的另一个常见原因是你用的模块镜头上没有IR滤光片。OV7670对红外光敏感如果镜头没有加IR cut滤光片画面在日光灯下会明显偏紫。这种问题不是寄存器能救回来的必须换镜头或者加滤光片。市面上很多廉价OV7670模块卖几十块钱镜头就是树脂片没有镀膜也没有IR截止偏色是常态。还有一种情况是RGB通道顺序颠倒。帧率和分辨率都很正常但图像颜色明显不对红色变蓝色、蓝色变红色这时需要调整0x12寄存器或者0x4A寄存器中关于RGB565格式的通道顺序位。不同批次、不同版本的OV7670默认通道顺序居然不完全一样这也是网上有人说要这样配、有人说要那样配的原因。6.3 有图像但有条纹、有噪点图像上出现规律性横条纹排查顺序依次是电源。先摸OV7670芯片温度如果明显发烫供电电压可能偏高。再用示波器看电源纹波超过50mV就会影响模拟电路。这是最常见的原因。XCLK和PCLK的走线。这两条时钟线如果和D0-D7数据线平行走线很长串扰会直接在图像上表现为竖条纹。可以考虑在时钟线上串联33欧姆的电阻来抑制振铃。曝光时间设置。如果条纹是一半亮一半暗或者滚动式的明暗变化可能是AEC自动曝光控制配置不当此时应该尝试固定曝光时间只靠AGC增益来适应亮度。噪点增多则通常和增益有关。环境光线不足时AGC会把模拟增益拉得很高噪点会被同时放大。这种情况下优先增加照明而不是去调高增益到极限。6.4 图像拖影残影拖影和残影的原因一般有两个第一曝光时间过长。OV7670的行曝光时间寄存器0x10高位、0x13、0x14设置得太长运动物体在单帧曝光时间内移动了多个像素就会在物体边缘产生鬼影。调低曝光时间可以解决但代价是画面变暗需要配合加大光圈或者补光。第二LCD显示刷新率不匹配。如果LCD屏本身的刷新频率不高而OV7670输出帧率较高看起来就会有残影。这时候找一块IPS高刷屏往往立竿见影。7. 写在最后的几点实在建议关于OV7670基础篇能讲的大概就到这。如果你是从零开始做这个项目我建议尽量不要让“能出图”成为唯一目标而是每一步都弄明白为什么。比如SCCB时序自己用逻辑分析仪抓一遍DCMI的同步信号极性亲手改一改看看会发生什么FIFO的读指针不复位会有什么现象——折腾过一遍你对嵌入式图像采集的理解会比抄十次代码都深。关于资料的选择我个人的体会是网上关于OV7670的中文教程虽然多但质量参差不齐很多老教程还在用老寄存器表照抄容易翻车。优先看三样东西OV7670官方datasheet去OmniVision官网搜OV7670datasheet、你手上模块卖家的寄存器配置代码、以及ST官方的DCMI例程。三个对照着看基本不会走偏。还有一点很多人没说OV7670的镜头焦距和视场角也会影响图像效果。标准模块配的镜头一般是6mm焦距、视场角约50度适合拍30cm到5米的物体。如果你的项目要识别近距离的二维码或者远距离的交通标志都需要单独配镜头。镜头接口一般是M12螺纹更换很方便拧上去对好焦就行。第一次换镜头记得用胶带固定或者点一点螺纹胶不然振动会让镜头松动、画面变模糊。如果你已经能把OV7670的图像稳定显示在LCD上下一步可以试着把它和STM32的DMA配合实现不间断采集然后做颜色识别或者简单的形状识别。图像数据到手之后你会发现真正的难点并不在传感器而在于怎么高效地处理和利用这些数据。但那已经是另一个话题等进阶篇再聊。最后分享一个小技巧调试OV7670时屏幕上放一个颜色鲜艳的物体比如红色小球或者橙子的画面比对着白墙调要直观得多因为白平衡和饱和度问题在彩色物体上一下子就能看出来。
返回列表