You need to enable JavaScript to run this app. 运行OpenCV红色目标测距代码触发NameError变量未定义错误咨询
优惠活动
大模型
产品
解决方案
定价
更多

运行OpenCV红色目标测距代码触发NameError变量未定义错误咨询

报错根因定位
  • 直接触发NameError的核心逻辑:主循环里存储目标宽度的genislik变量只有在识别到合格红色目标时才会赋值。只要某一帧没检测到符合面积要求的目标,genislik完全没被初始化,后面调用距离计算函数读取这个变量的时候就会报未定义。
  • 轮廓判断逻辑完全写反:原代码里遍历轮廓的时候,只要面积≥500的有效目标出现,就会触发exit直接退出程序,根本没法持续做实时检测。
  • 校准流程的隐藏坑:foto_cevirme函数如果加载的参考图resim.jpg不存在,或者图里没找到有效红色目标,face_width根本不会被赋值,函数直接返回未定义值,后面计算焦距的时候一样会报NameError。
  • 函数代码顺序写错:foto_cevirme里把return face_width写在了图像画框、掩码生成的前面,后面的可视化代码永远跑不到。
可落地修复方案
  • 进入摄像头主循环之前,先给genislik设个初始值0,就算某一帧没检测到目标也不会报未定义。
  • 把原来错误的else: exit删掉,只保留“轮廓面积小于500就跳过”的判断,符合要求的轮廓才提取对应的像素宽度。
  • 给foto_cevirme函数加兜底:函数一开始就设face_width = 0,要是参考图没检测到目标,直接弹出“校准图未识别到红色目标”的提示,别返回个未定义的值让后面代码报错。
  • 把foto_cevirme里的return face_width挪到所有图像绘制、掩码生成、窗口显示的代码后面,保证参考图的检测预览能正常出来。
  • 加个无目标判断:如果检测到的目标宽度是0,直接在画面上显示“未检测到红色目标”,别硬跑距离计算,省得报除零或者变量未定义的错。

内容的提问来源于stack exchange,提问作者Mustafa Kendigüzel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.03 04:54:05