今年上报了一个大学生SRTP项目,准备用树莓派作为主控板实现一个智能捡网球机。由于opencv开发库提供了大量图像处理算法的接口,因此只要一定程度上熟悉python语法和opencv库,实现这个程序并不是特别麻烦。本文会主要写程序实现的过程,不会涉及到很多的理论性的知识,有兴趣深入了解的可以自行查找网络上的各种资料。
本项目以网球的颜色作为识别特征。
识别过程为:获取视频帧----转换到HSV颜色空间----规定阈值、切割图像----识别轮廓获得网球位置信息
获取视频帧:
在树莓派上搭载摄像头获取视频帧不用多提,连接上摄像头然后直接opencv调用即可。因为在树莓派上安装opencv可以能涉及到到需要重新编译等各种问题,想避免麻烦的同学可以尝试直接pip opencv-python。树莓派摄像头可以选择官方的CSI摄像头,我为了便于在电脑上进行分析和调试,选用了usb线传输的摄像头模块,这种模块某宝上很多,使用起来也很简单。
转换颜色空间:
在HSV颜色空间下进行颜色识别能够很好地降低调试难度,提高识别精度。就作者本人的理解,RGB空间下的三通道是互相独立互不关联的,而HSV空间下的三通道值之间具有一定的关系或者说是主次区别,更容易分级调试确定阈值和修正因环境光影响产生的阈值偏移问题,同时HSV空间更符合人的视觉习惯。
转换颜色空间可用opencv的cvtColor函数实现。
hsv_img = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
注意!!!经过cvtColor函数转换后的图像HSV三通道的取值范围与普遍认知下的HSV通道取值范围不同,可能是为了统一数据类型,opencv将原范围(h:0~360°, s:0~1, v:0~1)映射到了(h:0~180, s:0~255, v:0~255)的空间上。
规定阈值、切割图像:
在颜色空间转换完成后&#x