去年,我使用YouTube上的排球视频进行足球识别和跟踪,甚至为那些想要利用他们的比赛记录做点什么的人推出了一项服务。
最近,我得到了一架无人机,当然,我做的第一件事就是和朋友们在公园里拍摄我们的比赛。在40-50英尺的高度盘旋足以捕捉整个球场,捕捉到的视频提供了许多分析机会。
但首先要做的是,让我们检查一下这里的球跟踪是如何工作的。无人机携带着带有万向节的相机,万向节吸收了无人机的运动。
摄像机的视频看起来非常稳定,但我的方法,基于背景去除,在这里失败了:
一种解释是万向架的稳定性并不完美,框架有肉眼看不见的微小波动。但是电脑有更锐利的视觉,它们能看到不同之处。所以背景相当生动:
仅供比较-一个类似的静电视频,去掉了背景,如下所示:
所以我们没什么可做的,只能寻找新的方法。幸运的是,OpenCV是一个古老而丰富的库,有许多算法需要检查。
在过去,我有过使用Canny edge根据物体的轮廓找到物体的经验。
gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
gray = cv.GaussianBlur(gray, (5, 5),0)
mask = cv.Canny(gray, 50, 100)
将这一算法应用到无人机视频中,得到了令人振奋的结果:
正如人们所看到的,球被识别和跟踪。有趣的是,对于真正的静电视频,Canny提供的结果(比去除背景)更差,所以我们不能到处使用它。可以解释说,坎尼认出了许多背景物体,球在飞过时可能会丢失。
然后删除Canny过滤图像上的背景:
mask = backSub.apply(frame)
mask = cv.dilate(mask, None)
mask = cv.GaussianBlur(mask, (15, 15),0)
ret,mask = cv.threshold(mask,0,255,cv.THRESH_BINARY | cv.THRESH_OTSU)
看起来好多了:
发球轨迹现在相当准确:
更多关于排球和计算机视觉的文章
GitHub回购
原创文章,作者:fendouai,如若转载,请注明出处:https://panchuang.net/2021/06/16/%e5%9f%ba%e4%ba%8eopencv%e5%92%8ccanny%e8%be%b9%e7%bc%98%e6%a3%80%e6%b5%8b%e7%9a%84%e6%97%a0%e4%ba%ba%e6%9c%ba%e8%a7%86%e9%a2%91%e6%8e%92%e7%90%83%e8%b7%9f%e8%b8%aa/