实践/固件编程

OpenCV颜色识别怎么做循迹?一台摄像头小车三行HSV代码自己找线

固件编程 2026-10-13 19:47:02 5阅读 3讨论 举报
OpenCV颜色识别怎么做循迹?一台摄像头小车三行HSV代码自己找线

传统循迹小车靠几颗红外对管去认地上的黑线,调试起来对场地颜色很挑剔。后来我把摄像头装上车,用OpenCV做颜色识别,小车能看着画面里一条彩色线条自己修正方向跑。相比固定对管,摄像头方案看得见整条路的走向,改个颜色阈值就能换线,灵活很多。

这套识别的核心思路其实很朴素:把摄像头每一帧图里“我想要的颜色”单独挑出来,找到它在画面里的位置,然后根据它偏离画面中心的多少去调整车轮转向。方向对不对,全靠颜色找得准不准。

为什么用HSV而不是RGB

一开始很多人习惯拿RGB去匹配颜色,但光照一变,同一张纸的RGB值能差出十万八千里,阈值很难写。换成HSV就稳很多:H是色相(颜色本身),S是饱和度,V是亮度。因为光照主要影响亮度V,而色相H相对稳定,所以只要圈住目标颜色的H区间,再放宽一点S和V,就能在阴天和阳光下来回切换都认得出线。

三行核心代码做了什么

OpenCV里做这件事,关键就三步。第一步用cv2.inRange把原图转成一张黑白掩膜图,落在目标HSV范围内的像素变白,其余变黑;第二步在掩膜图上找轮廓,或者算白色像素的重心;第三步拿这个重心横坐标和画面中心一比,偏差就是我们要的转向误差。

拿到误差之后,把误差乘以一个比例系数,加到小车左右轮的转速差上就行:线偏左就让左轮慢点、右轮快点,车身跟着偏回中间。误差为零时两轮同速,直着走。这里比例系数调太大会来回抖,调太小又跟不上弯道,要现场一点点调。

避坑经验,实测才有用

第一个坑是环境光照。直射阳光会把高光的表面拉成一片亮白,影响S和V的判断。我一般把识别区域限制在车头前方一小块,并定时重新采集一次现场背景,让阈值更贴近实际光线。

第二个坑是反光。胶带线某些角度会反白光,看起来像大片白色杂斑,这时适当降低S和V的上限,把过于亮的像素排除掉,掩膜就不会糊成一片。

第三个坑是帧率和延迟。摄像头处理在树莓派上跑,画面帧率有限,转向控制别指望一帧就跟上,建议用小步长的修正加一点自整定,方向舵会更顺滑而不是死板地左右乱甩。

用OpenCV给小车装“眼睛”,门槛比想象中低。你不一定需要多么深的视觉算法,把HSV阈值、轮廓重心、差速转向这三步跑通,一台能自己找线的小车就成型了。再往下,还能延伸到识别小物件、追球、甚至简单的人脸跟随,玩法一下就打开了。

版权声明:
作者:代码杰哥
链接:https://www.aiddithome.com/p/20c40bb0ac0cea.html
来源:固件编程
实践版权归作者所有,未经允许请勿转载,若此实践存在违规行为,您可以点击 “举报”。


登录 后发表评论
3条评论
只看不说话
1楼 · 10小时前

三行核心代码思路真清爽,改天把我那台红外循迹也换成摄像头方案

参数党小马
2楼 · 10小时前

帧率那个坑很真实,PID比例调太大反而死板地左右乱甩,还是小步修正舒服

天快亮了
3楼 · 10小时前

HSV比RGB稳这点太关键了,光照一变RGB阈值根本没法用,换HSV马上正常

本文作者
代码杰哥
代码杰哥 实践者
最近更新:2026-10-13 19:47