☰
TSL1401线性CCD快速上手:时序、曝光与128像素采集
2026/10/31 9:03:54 网站建设 项目流程

简介:《快速上手TSL1401线性CCD》是一份面向智能车竞赛光电组选手、嵌入式初学者以及传感器课程实践者的入门文档,着力解决线阵CCD原理抽象、官方英文手册冗长、曝光与采集时序不易理解等痛点。压缩包内仅含1个PDF文件,大小约342KB,篇幅精炼,便于在电脑或移动设备上随查随用。内容先从线性CCD与面阵CCD的成像差异切入,帮助读者建立一维图像与128像素输出的直观认识;随后梳理TSL1401的引脚定义、像素积分电路以及SI、CLK控制时序,说明曝光时间与复位时间的关系;再给出单次曝光法、连续曝光法和像素采集的编程要点,并涉及基于亮度反馈的编程思路与常见问题排查。文中还提示曝光时间过长可能造成图像模糊或饱和,对备赛调试有实际参考价值。已有426人学习,适合在备赛调试或课程实验中快速建立线阵CCD的软硬件认知,减少摸索成本。

1. 新手第一问:TSL1401 线性 CCD 到底是个什么东西

很多人第一次看到「TSL1401 线性 CCD 快速上手」,脑子里冒出来的第一个问题是:这不就是个摄像头吗,有啥好学的。我第一次也这么想,直到把它接到板子上,才发现它拍出来的东西根本不像照片——屏幕上只有一行 128 个数字,像一条会变色的长条。说得再直白点,普通摄像头是一整块感光的“网”,一次捞起一整片画面;线性 CCD 只是一根细细的“扫描线”,一次只捞一条线上的 128 个点,跟在超市收银台扫条形码的那道光差不多。TSL1401 就是这样一个 128 像素的线阵传感器,供电 3V 到 5V,靠 SI、CLK 两根信号线就能把这行亮度值一个个送出来。它适合谁?适合刚接触图像采集、想做循迹小车、想弄明白“光怎么变成数字”的新手——数据只有一行,不用一上手就被二维图像吓住。

2. 拆开这只眼睛:SI、CLK、AO 三根线怎么把光变成数字

拿到一个模块,最让人懵的不是代码,而是那几个引脚名字:AO、CLK、SI、VDD、GND、NC,看着像乱码。这一章想做的事很具体,就是把这些名字一个个拆开,让你知道每根线到底在干什么,以及为什么只靠三根信号线,光就能变成一串能存进数组里的数字。新手学硬件最怕跳过这一步,直接复制别人的程序,结果是数据全是 0,或者波形乱跳,这时候你连该怀疑哪根线都不知道,只能瞎试。所以先花十分钟搞清楚硬件,后面写代码会顺很多。

2.1 引脚只有六个,真正要接的就四根

TSL1401 的引脚少得让人意外,一共 6 个,其中两个还是“不用接”的。新手先把这张表记住,接线的时候对照着来,基本不会接错。

引脚名编号作用新手要不要管
SI1串行输入,决定数据输出序列从哪开始必须管
CLK2时钟输入,控制电荷转移、像素输出和复位必须管
AO3模拟电压输出,每个像素的灰度值从这里出来必须管
VDD4供电电源,3V 至 5V必须管
GND6、7地必须管
NC5、8不连接不用管

看起来有 6 个,实际要接的是 SI、CLK、AO、VDD、GND 这几根。SI 和 CLK 是单片机发给 CCD 的,方向是“你告诉它什么时候开始、什么时候换下一个像素”;AO 是 CCD 发给单片机的,方向是“它把当前像素的亮度用电压的形式报给你”。VDD 和 GND 就不多说了,供电接反或者没共地,是最常见的“数据全是 0”的原因,新手先确认这两根,比什么都重要。

三个控制信号里,SI 最容易被误解。它不是“数据输入”,CCD 不需要你告诉它每个像素该是多少,它只是通过 SI 这个高电平脉冲告诉内部电路:新的一轮采集从这儿开始。你可以把 SI 想成发令枪,CLK 想成节拍器,AO 想成报数的人——发令枪一响,节拍器开始打拍子,每打一下,报数的人报一个数。这个比喻后面会反复用到,因为你写代码的时候,本质上就是在控制这三者的先后顺序。

还有一点值得提前说:AO 出来的电压可以直接接单片机的 AD 输入引脚,不需要再外接运放。原因是芯片内部已经有一个增益调整模块,把信号放到了合适的范围。很多人第一次用会习惯性地加一级运放,结果发现加了跟没加差不多,反而多了一堆噪声和调试工作量,这是个典型的“多做反而多错”的地方,后面避坑那一章还会再提。

2.2 128 个像素怎么排队出来:SI 发令,CLK 打拍子,AO 报数

传感器内部是 128 个线性排列的光电二极管,每个二极管配一小块积分电路,这一整套东西就被叫成一个“像素”。每个像素干的事很简单:感受照在它身上的光有多强,然后把这个强度攒成一个电压。光照越强、攒的时间越长,最后出来的电压就越高。这就是为什么后面一定要聊曝光时间——它决定了每个像素“攒”多久。

关键问题是:128 个像素同时都在攒电压,怎么一个一个送出来?靠的就是内部那套开关逻辑和移位寄存器。SI 给出一个高电平脉冲,内部电路知道“新一轮要开始了”,先给所有像素做一次复位,把上一轮攒的电荷清掉;然后 CLK 开始打拍子,每来一个时钟,移位寄存器就把下一个像素接到 AO 输出上。芯片规定得很明确:每个像素的值在 CLK 的下降沿时可以从 AO 采集。这句话是写代码时最该记牢的一句,采集点抓错了,读出来的数据就是错位的。

所以整个流程的顺序感很强:先复位,再曝光(攒电压),然后逐个输出。复位和输出是靠 CLK 推动的,曝光是靠两个 SI 之间的时间间隔撑出来的。你把这条主线记住,后面看到“前 18 个 CLK 是复位时间”“第 19 个 CLK 到下一个 SI 是曝光时间”这类说法,就不会觉得是天上掉下来的规定,而是这条主线自然推出来的结果。

新手还容易忽略一个细节:采集完 128 个像素之后,还要再补第 129 个 CLK。原因在于内部移位寄存器需要这一拍才能彻底走完一轮,少了这一下,下一次采集的起点就会错位,表现出来就是图像整体偏移或者数据对不上。这个坑非常隐蔽,因为程序不会报错,数据看着也挺像回事,只有当你在同一位置反复采集、发现波形总是飘一格的时候,才会怀疑到它头上。

2.3 为什么新手适合从线阵入手,而不是一上来啃面阵

摄像头模块用的是面阵 CCD,分辨率是 m×n 的二维矩阵;TSL1401 这种线阵的分辨率是 p×1,一次只有一行。这个差别听起来像是“功能缩水”,但对新手来说恰恰是好事。二维图像意味着你要处理行、列、坐标、缓存、显示,随便一个环节出问题都能让你调一整天;而一维数据只有 128 个数,你可以直接把它们打印出来,肉眼就能判断哪一段亮、哪一段暗,问题定位的成本低太多了。

实际场景里,线阵也不是“低配版”。循迹类的小车项目里,车只需要知道前方一条线上的黑白分布,用来判断赛道边界在哪、车偏了多少,一行数据完全够用。这也是为什么有些比赛组别会明确要求使用线性 CCD——它逼着你去理解采集的本质,而不是依赖现成的图像库。我见过不少新手,面阵模块玩了大半年,问他曝光和阈值怎么定,还是说不清楚,因为二维图像把这些问题都藏在“看起来正常”的画面里了。

从学习路径上看,线阵涉及的核心概念一个都不少:时序、曝光、阈值、二值化、噪声。这些概念在面阵上一样要用,只是线阵把复杂度压到了最低,让你能专注在一件事上。等你能稳定地读出一行干净的 128 个数据,并且能根据环境亮度自己调整参数,再去看面阵,会发现很多以前觉得玄学的东西,其实都是同一套逻辑换了个壳。

3. 曝光时间是第一个要拧的旋钮:亮和暗都归它管

如果只能给新手留一个调参建议,我会说:先把曝光时间搞明白。因为它决定了两件事——图像够不够亮,以及图像清不清楚。这两个需求还经常打架:环境暗了你想加曝光,可一加,采集周期变长、画面变糊,小车反应也变慢。这一章就围绕这个旋钮展开,先讲清它为什么存在,再讲怎么选,最后给一段能直接照着改的采集代码。

3.1 积分时间就是曝光时间:跟相机快门一个道理

芯片手册里反复出现一个词叫“积分时间”,第一次看确实容易懵。说白了,它就是相机里的曝光时间,只不过换了个更学术的叫法。胶片的曝光时间指的是底片感光的时间,时间长照片就亮,时间短照片就暗;线性 CCD 一模一样,像素攒电压的时间越长,输出值越大。

时序上有个明确的划分:SI 之后的前 18 个 CLK 属于复位时间,把上一轮攒下的电荷清干净;从第 19 个 CLK 开始,一直到下一个 SI 到来,这段时间才是真正的曝光时间。如果你把 CLK 跑得足够快(芯片最高支持 8MHz),前面这一小段复位时间基本可以忽略,曝光时间就近似等于两个 SI 信号之间的间隔。这也是为什么很多示例代码干脆就用“两次 SI 之间隔多久”来控制亮度,简单粗暴但有效。

还有一个硬性上限要记住:这颗芯片的最大曝光时间是 100ms。意思是不管你把间隔拉多长,超过 100ms 之后图像效果跟 100ms 是一样的,不会更亮。所以调参的时候心里要有个数,别一路往上加,加到 300ms 发现没变化,还以为是程序坏了,其实是被器件本身卡住了。

3.2 曝光时间怎么选:暗了加、亮了减,但别一路加到底

理论上讲得很好听:环境暗就加曝光换亮度,环境亮就减曝光防饱和。但真实项目里,这条规则有个前提——你拍的东西得是“不怎么动”的。如果采集的是快速变化的场景,比如小车在赛道上跑,那加曝光会带来两个麻烦。

第一个麻烦是周期。曝光时间变长,意味着一帧数据的采集周期变长,系统的控制回路就慢了半拍。本来每 5ms 能拿到一次赛道信息,你改成 20ms,车都快冲出去了才拿到上一帧的数据,控制上必然迟钝。第二个麻烦是模糊,这个跟相机快门完全一样:快门快,能定格高速运动的物体;快门慢,运动物体就拖影。线性 CCD 的“拖影”表现是亮度值被摊平,本来黑白分明的边界变得含糊,二值化的时候阈值怎么调都不对。

我的建议是给曝光时间设一个上限,比如在循迹场景下先卡在 5ms 到 10ms 这个区间里试,宁可暗一点,靠后面的软件增益或者阈值补偿来救,也不要为了追求“画面够亮”把曝光拉到几十毫秒。如果环境实在太暗,先想想是不是可以补光、是不是镜头光圈太小,而不是一味地在代码里加曝光。反过来,如果是拍静止物体、做实验验证,那曝光长短就随意了,把图拍清楚比什么都重要。

判断曝光是否合适的土办法:把 128 个数据打印出来,看最亮的那几个值有没有顶到 AD 的上限。顶到头了就是过曝,白白一片,黑白线的差别被压没了;如果最亮的点才到满量程的三分之一,那就是偏暗,稍微加一点曝光或者加增益。这个判断不需要示波器,串口助手就能干。

3.3 第一个能跑的采集:把 128 个像素读进数组

概念讲完了,落到最实在的一步:写一段能把 128 个像素读进数组的代码。下面这段用的是单次曝光法的思路,逻辑最直白,适合第一次跑通。代码是示意性的,具体函数名要换成你手上单片机平台的写法。

// 单次曝光法:先走完一轮丢弃,再走一轮采集 #define PIX_NUM 128 uint16_t pixels[PIX_NUM]; // 存放 128 个像素的灰度值 void ccd_capture_once(uint16_t exposure_ms) { // 第 1 个 SI:宣告新一轮开始 SI_HIGH(); delay_ns(50); SI_LOW(); // 这一轮把 129 个 CLK 全部走完,AO 上的数据丢弃不要 for (int i = 0; i < 129; i++) { CLK_HIGH(); delay_ns(60); CLK_LOW(); delay_ns(60); } // 两个 SI 之间的这段延时,就是真正的曝光时间 delay_ms(exposure_ms); // 第 2 个 SI:这一轮采到的才是刚才曝光得到的图像 SI_HIGH(); delay_ns(50); SI_LOW(); // 在 128 个 CLK 的下降沿依次采样 AO for (int i = 0; i < PIX_NUM; i++) { CLK_HIGH(); delay_ns(60); CLK_LOW(); // 下降沿到来 pixels[i] = adc_read(AO); // 立刻读模拟电压 delay_ns(60); } // 第 129 个 CLK 收尾,少这一下下次采集会错位 CLK_HIGH(); delay_ns(60); CLK_LOW(); }

这段代码里有几个地方值得停下来看一眼。delay_ns(60)是在给时钟留半周期,60ns 只是示例值,实际用的时候要看你的 CLK 频率,芯片最高支持 8MHz,但单片机 AD 转换没那么快,所以多数人会把 CLK 压到几百 kHz 甚至更低,宁可慢一点也要保证每个点都采稳。exposure_ms就是上一节讲的曝光时间,第一次跑建议从 5 开始试,跑通了再上下调。

adc_read(AO)这一句必须在CLK_LOW()之后立刻执行,中间不要插别的耗时操作,否则采到的就不是这个像素的值了。很多人图省事,先把 128 个 CLK 打完、把电平存下来,再统一做 AD 转换,这样采到的全是最后一个像素的值,波形画出来是一条直线,很容易误判成硬件坏了。

跑通之后怎么验证?把pixels数组里 128 个数通过串口打出来,对着一个黑白相间的条纹或者一张纸的边缘,看数值有没有明显的高低变化。如果全是同一个数,先查接线和共地;如果数值在跳但没规律,多半是时序或者采样点位置不对。

4. 两种采集写法:单次曝光和连续曝光怎么选

代码跑通了,接下来会遇到一个实际问题:曝光那段延时,CPU 只能干等着,什么都干不了。对于只做一件事的实验无所谓,可一旦你的程序还要控制电机、读按键、跑通信,这段空转就变成了浪费。这一章讲两种常见的组织方式,顺带把阈值这件事一并说了,因为采集和判断本来就是连在一起的。

4.1 单次曝光法:最直白的写法,代价是 CPU 干等

上一节那段代码就是单次曝光法。它的特点是采集周期不固定,你想什么时候采就什么时候采,灵活度高,适合调试、适合采集节奏由外部事件触发的场景。写起来也最符合直觉:发令、等待、采集,一条线走下来,中间不用考虑中断、不用考虑并发,新手最容易被这种写法带进门。

代价也很明确:delay_ms(exposure_ms)这几毫秒里,CPU 就是在数空拍。如果你的曝光是 5ms,一秒采 200 次,那 CPU 有整整一秒的时间在等;要是曝光加到 20ms,浪费就更夸张了。更麻烦的是,这段延时期间单片机什么都干不了,电机的控制周期被打断,响应会明显变卡。所以单次法通常只在两种情况下用:一是纯实验,二是采集周期本来就由别的逻辑决定,反正闲着也是闲着。

还有个容易忽略的点:单次法要求你在前一个 SI 周期内输出 129 个 CLK 来丢弃无效数据,曝光结束后的第二个 SI 周期采到的才是正确值。这个“先丢一轮再采一轮”的顺序不能省,省了之后采到的可能是上一轮的残留或者复位过程中的中间值,表现出来就是数据整体偏移一格。

4.2 连续曝光法:把曝光节拍交给定时器

连续曝光法的思路是把“什么时候该采”这件事交给定时器。你设一个周期中断,中断多久来一次,就相当于曝光时间有多长,然后在中断服务函数里完成 SI、CLK 和 AO 采集。这样主程序该干嘛干嘛,采集在后台按固定节奏走,CPU 的等待时间被省下来了。

// 连续曝光法:定时器中断负责节拍,主程序只管用数据 volatile uint8_t frame_ready = 0; volatile uint16_t pixels[PIX_NUM]; // 定时器中断,周期就是曝光时间 void timer_isr(void) { SI_HIGH(); delay_ns(50); SI_LOW(); // 新一轮开始 for (int i = 0; i < 18; i++) { // 前 18 个 CLK 复位 CLK_HIGH(); delay_ns(60); CLK_LOW(); delay_ns(60); } for (int i = 0; i < PIX_NUM; i++) { // 128 个像素依次输出 CLK_HIGH(); delay_ns(60); CLK_LOW(); pixels[i] = adc_read(AO); delay_ns(60); } CLK_HIGH(); delay_ns(60); CLK_LOW(); // 第 129 个 CLK 收尾 frame_ready = 1; // 告诉主程序:这帧好了 }

中断周期就是曝光时间,改周期就等于改亮度,调参的时候只需要动一个数字,比单次法里到处找延时函数舒服得多。frame_ready这个标志位是给主程序看的:中断里只管采,主程序看到标志位再去做二值化、算偏差,两边职责分得清楚,不会互相拖累。

这里要提醒一句,把一长串循环塞进中断函数在入门阶段能跑,但不是长久之计。中断里待太久会阻塞其他中断,等你的系统里加了电机 PWM、编码器、串口之后,冲突就会冒出来。真到那一步,更稳的做法是用状态机把一次采集拆成多次短中断,或者用 DMA 搬数据。入门先跑通,后面再优化,这个顺序别搞反。

4.3 阈值怎么定:从固定值到亮度反馈

数据采回来了,接下来要把 128 个灰度值变成“黑”和“白”两个状态,也就是二值化。这一步的核心是一个阈值:比它亮的算白,比它暗的算黑。听起来简单,但固定阈值在实际场景里几乎一定会翻车——早上光线柔和,中午太阳直射,同一个阈值在两种环境下给出的结果完全不同。

于是就有了亮度反馈这个思路。有些模块版本在板子上集成了一颗感光传感器,它的输出电流随环境亮度线性变化,接法跟 TSL1401 一样,直接把输出接到单片机 AD 口就能读。有了这个值,你就可以让阈值跟着环境走,而不是拍脑袋定一个数。

// 根据环境亮度动态算阈值 uint16_t vout = light_sensor_read(); // 环境亮度对应的电压 uint16_t vth = (uint16_t)(0.6f * vout + 30); // k 取 0.6,b 取 30,先估后调 for (int i = 0; i < PIX_NUM; i++) { binary[i] = (pixels[i] > vth) ? 1 : 0; // 亮于阈值算白线,否则算黑线 }

公式Vth = k * Vout + b是线性的,k和b这两个参数没有标准答案,得靠在你的实际环境里试。基本规律是:环境越暗,阈值应该越低,所以k取正数;b是个偏置,用来把阈值抬到一个合理的起点。第一次调的时候可以把k设成 0.6、b设成 30,然后拿一张白纸和一块黑胶带在灯下晃,看二值化结果稳不稳,不稳就微调。

同样的逻辑也可以反过来用在曝光上:环境暗了就适当加曝光,但一定要设上限,别让曝光时间无限增长,否则就回到上一章说的那个坑里了。这两个自适应可以只做一个,也可以一起做,新手建议先做阈值自适应,改动小、见效快,曝光那块先固定住。

5. 新手最容易翻车的地方:五条排查清单

前面几章讲的都是“怎么让它跑起来”,这一章讲“跑不起来的时候看哪里”。这些坑我自己基本都踩过一遍,有些还踩了好几遍,写下来是想让你少走点弯路。每条都按“现象、原因、解决”的顺序写,遇到问题可以直接对号入座。

5.1 硬件上的三个坑:镜头、运放、对焦

坑一:以为镜头参数可以随便挑。

现象:买回来的模块,别人说能看两米,你装上去发现一米开外就糊成一片。

原因:这类模块的镜头是厂家配好的,焦距、光圈都是固定的,可视效果也就固定了。所谓“最远能看多少米”的说法,实际含义是“在这个距离范围内比较合适”,超出范围清晰度就掉下去了。焦距决定视角大小,焦距越长视角越窄、看远处更清楚;光圈决定进光量,光圈越大成像越亮、需要的曝光时间越短。

解决:先搞清楚手上这块模块的镜头适合看多远,把探测距离设计在这个范围内,而不是硬拽着它去看超出能力的目标。真需要改视角,就换镜头,别指望靠调代码解决光学问题。

坑二:给 AO 加运放想“提亮”。

现象:觉得输出信号太弱,接了一级运放,结果亮度没提升多少,噪声倒是上来了。

原因:芯片的 AO 引脚内部已经带了增益调整,官方也明确说过不需要再接运放。所谓的“加运放能提亮”,本质上跟采完数据之后在单片机里做数字增益是一回事,前者还多引入了模拟噪声。

解决:先不加运放,直接接 AD 口。如果确实偏暗,优先调曝光或者做数字增益,实在要动模拟前端,再考虑运放,并且要做滤波。

坑三:图像糊了就怪程序,不调焦。

现象:采出来的数据边界很平缓,波形像小山包,看不出锐利的黑白跳变。

原因:镜头在镜头座上的位置不对,也就是没对上焦。对焦正确的波形应该是陡峭的、边界处几乎是直上直下;没对上焦的波形是缓慢过渡的。

解决:一边采数据一边慢慢拧镜头,盯着波形看,什么时候跳变最陡什么时候停。这个动作看着土,但比在代码里改参数有效得多。调完之后记得把镜头固定住,别让它自己跑位。

5.2 数据和时序上的两个坑:第 129 个 CLK、边缘发暗

坑四:少发第 129 个 CLK,数据整体偏一格。

现象:程序不报错,数据看着也正常,但每次采集的结果总是比实际位置偏移一个像素,换个位置再采还是偏。

原因:128 个像素采完之后没有补第 129 个 CLK,内部移位寄存器没走完一轮,下一次采集的起始点就串了。

解决:在采集循环后面老老实实补一个 CLK,别省这一下。这个坑的隐蔽之处在于它不会让程序崩,只会让数据悄悄地错位,靠肉眼很难发现,只有反复对比同一目标才看得出来。

坑五:图像中间亮、两边暗,以为传感器坏了。

现象:同一张白纸,采出来中间一段数值很高,越往两边越低,像蒙了一层灰。

原因:这是光学系统里普遍存在的余弦效应。打到边缘的光线是斜着进入感光器件的,路径更长、损失更多;中间的光是垂直入射的,损失最小。几乎所有成像系统都有这个毛病,不是你这块板子的问题。

解决:靠算法补偿,比如在二值化之前先做一次归一化,把每个像素除以它的理论响应系数,或者干脆只用中间一段数据做判断。指望换一块新模块来解决,是白费功夫。

把这五条过一遍,你会发现真正需要高价仪器才能诊断的问题不多,大部分都是接线、时序、光学位置这些能自己动手确认的东西。新手遇到问题最忌讳的就是一头扎进代码里改参数,先确认硬件和时序,往往更快。

6. 下一步学什么:从读出一行数,到让它自己适应光线

跑通第一个采集例子之后,很多人会卡在一个尴尬的位置:数据能读了,但不知道怎么把它变成一个“能用的东西”。这一节给一条我自己走过、也觉得比较省力的路径,按顺序来,每一步都能独立验证,不会出现“学了半天不知道对不对”的情况。

第一步是把静态数据吃透。找一个固定的目标,比如一张画着黑白条纹的纸,把它放在不同距离上,每次采 128 个点打印出来,观察波形的形状怎么变。这一步不需要写新代码,就是反复跑、反复看,直到你能凭波形猜出目标大概在哪、黑白边界在第几个像素。这个“手感”比任何教程都值钱,后面调阈值、调曝光全靠它。

第二步是把二值化和偏差计算接上。有了黑白分布,就能算出黑线的中心位置,再跟“应该在哪”做差,得到一个偏差值。这个偏差值就是控制器的输入。到这一步,你的采集程序才算真正变成了一个传感器,而不只是一个数据打印器。

第三步才是自适应。前面说的亮度反馈、动态阈值,都放在这一步做。别一上来就写自适应,因为自适应本身也需要一个稳定的基准来判断“调得对不对”,基准没建好,自适应只会让你更懵。

阶段目标验证方式大概花多久
读出一行数据128 个值能稳定打印波形随目标变化而变化半天到一天
二值化与偏差算出黑线位置偏差手动移动目标,偏差跟着变且方向正确一到两天
自适应参数换环境不用改代码开灯关灯,结果基本一致三到五天
接入控制让车跟着线走低速能跑完全程一到两周

时间只是参考,别被它绑住。我第一次做的时候,光“读出一行数据”就耗了整整两天,原因是一直以为程序有问题,最后发现是地线没共好。也是那次之后我养成了一个习惯:每次接线完先不写代码,先用万用表把 VDD 和 GND 量一遍,确认供电正常再往下走。这个动作只要十秒钟,却能省掉后面几个小时的瞎猜。

还有个小建议:把每次调参的结果记下来,哪个曝光配哪个阈值、在什么光照下效果好,写在一个本子上或者一个文本文件里。参数之间的关系不是线性的,凭记忆一定会乱,而记录下来的东西过一个月再看还是能看懂。这个习惯听起来笨,但它能让你从“每次都要重头试”变成“在已有基础上往前挪”。

再往后,你可以去看二维的图像传感器了。有了这一路的底子,你会发现面阵上的曝光、阈值、二值化、边缘效应,全是同一套东西换了个规模,不再有当初那种无从下手的感觉。希望这条路径能帮到你,别急,先把这一行 128 个数读稳。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询