首先我们确定思路:
由于是照片,不是单纯三角形的图像,有很多杂七杂八的干扰项目。使用opencv实现整个目标。
首先,识别图片,从图片中识别到我们要的三角形,排除其他的杂项。识别到之后,读取三角形三个角的坐标。由于赛方给我们的是一个等腰三角形。长这样:
这样就一定有他的底边是最短的。取到坐标之后算出三条边的长度,取最短的那一条代表整体大小。
取到大小之后,我们通过最短边在图片中算到的距离与实际距离相比求距离,公式为:
距离=(相机焦距✖三角形实际大小)➗从图片中算出的大小
由于赛方没给相机焦距,要自己求,这里可以通过他给的几张测试图片和距离求出相机焦距:
相机焦距=(从图片中算出的大小✖距离)➗三角形实际大小
在opencv上实现:首先将图片转成二值化,这样方便得到三角形边框,再代入上面的公式就可以得到:
具体操作可以去看其他人博客。
识别颜色:首先识别颜色要在三角形方框以内,我们只要取三角形内任意一个像素点识别就可以了,刚刚得到了三角形三个点的坐标,那我们把他平均一下,就可以得到三角形中点的坐标,然后将中点的坐标转成hsv来识别,hsv有三个参数,我们只取第一个参数颜色就可以了。
我这里:
红色:0~10
蓝色:100~130
绿色:50~80
黄色:15~40
最后效果:
这是识别距离为38cm的三角形,误差在5%范围以内,准确识别到绿色。