openpnp - 底部相机视觉识别CvPipeLine的参数bug修正

文章目录

openpnp - 底部相机视觉识别的CvPipeLine的参数bug

概述

底部相机抓起一个SOD323的元件,进行视觉识别。

识别出的矩形错了,是一个很长的长方形,长方形的短边和器件差不多宽,但是长边比器件长10倍。导致识别出错。

因为这时,无论怎么填写封装的长和宽,都无法正确识别。

当识别出错时,用CvPipeLine的Edit功能,找到了问题。

原来是openpnp给的默认识别参数整错了,改了一下OK.

笔记

因为大部分元件识别都是好的,且用的都是默认的底部相机视觉。

所以,有个别元件识别错误后,要针对这个元件进行视觉识别的参数修正,而不能去动默认的底部视觉参数。

FilterContours命令识别的范围多了,导致识别了吸嘴圆形帽子上的一个点,这要继续过滤。

在FilterContours命令后面,默认就有个MaskCircle命令,默认的diameter是0,即不过滤。

这就导致后续命令用的图像在元件很远的地方有个点(FilterContours命令带过来的)

将MaskCircle的参数diameter改为300,基本就圈住了元件附近,再远的图像就用这个圈过滤掉了。

MaskCircle后面默认的后续命令是DrawContours

默认用的输入图像是filterContours的结果,这就不对了,因为针对这个元件,filterContours识别的多了(除了元件,还有离元件很远的一个点)

将DrawContours的参数contourStageName改为11(就是MaskCircle命令实例名称为11的结果), 这回就OK了。

在后续的命令处理后,红框就只框在元件的引脚外框上。

openpnp的视觉识别参数的错误原因

在FilterContours和DrawContours命令之间,加了一个MaskCircle命令(但是MaskCircle默认没做过滤)。

估计官方也考虑到给的视觉识别参数无法适应所有的吸嘴和元件,所以给用户留了一个改正的节点。

但是DrawContours的输入没有用MaskCircle命令的处理结果,这就是bug了。

备注

对openpnp的视觉处理参数也不熟, 主要是官方也没有文档专门讲这个。

以前都用默认的, 如果真出现问题,无奈,还真不知道怎么弄。

这次发现识别的有问题,在设备开着时,抓一个这种元件进行底部相机视觉识别,如果识别错误或者识别的不稳定,这时就可以在线编辑调试视觉识别参数。

还好,经过简单的修改,能正确识别了。

虽然不太懂官方为啥给这些命令进行图像识别的处理,但是大概齐知道啥意思。

图像识别处理的大概流程如下:

  • 从摄像头捕获图像
  • 进行颜色转换
  • 用蒙版屏蔽不需要的区域(e.g. 吸嘴/元件以外的区域)
  • 转成黑白图像
  • 画出最小矩形
  • 重新载入摄像头的图像
  • 将矩形换成红色显示

补充 - 如果要直接改默认的底部视觉要注意

元件的默认底部视觉都是全局的默认底部视觉。

最好是每个封装单独给一个配置,来改视觉。

开始没注意,直接改的底部视觉。

因为加入了MaskCircle命令名字为11,参数diameter值改为了300,其他用默认底部视觉的元件出现了奇怪问题。

e.g. LQFP32元件对齐后,居然是45度。导致贴到板子上角度也是错的。

如果要改全局视觉,MaskCircle命令名字为11,参数diameter值应该改为-1,代表不过滤任何图像,即输入图像直接转成输出图像。

END

相关推荐
LostSpeed22 天前
openpnp - 在openpnp中单独测试相机
openpnp
LostSpeed22 天前
openpnp - 手工修改配置文件(元件高度,size,吸嘴)
openpnp
LostSpeed24 天前
openpnp - 解决“底部相机高级校正成功后, 开机归零时,吸嘴自动校验失败的问题“
openpnp
LostSpeed1 个月前
openpnp - bug - 散料飞达至少定义2个物料
openpnp
LostSpeed1 个月前
openpnp - 吸嘴校正失败的opencv参数分析
openpnp
LostSpeed1 个月前
openpnp - 图像传送方向要在高级校正之前设置好
openpnp
LostSpeed2 个月前
openpnp - juki吸嘴尺寸
openpnp
LostSpeed2 个月前
openpnp - 底部相机高级校正的参数设置
openpnp
LostSpeed1 年前
openpnp - 给底部相机加防尘罩
openpnp