机器视觉软件开发-python视觉开发书籍
机器人视觉应用程序可能会提出一系列复杂的要求,但开源库可以为几乎所有这些要求提供解决方案。 开发人员可以找到从基本图像处理和对象识别到运动规划和避免碰撞的开源软件包。 此外机器视觉软件开发,还有一些关键的开源图像处理软件包可以帮助开发人员实现复杂的机器人系统。
在可用的开源软件包中,OpenCV 可能是使用最广泛且功能最丰富的。 OpenCV 发行版实现了 2500 多种算法,通过一系列模块处理图像处理需求,包括:
核心,它定义了所有其他模块使用的基本数据结构和功能;
imgproc,提供图像处理功能,包括线性和非线性图像滤波、几何图像变换、颜色空间转换、直方图等;
视频,支持运动估计、背景减除和对象跟踪算法;
calib3d,提供基本的几何算法、相机标定、物体位姿估计等;
features2d,提供特征检测器、描述符和描述符匹配;
objdetect,它提供对预定义类的对象和实例的检测;
OpenCV用c++编写,支持c++、Python、Java和Matlab接口,支持Windows、Linux、Android和Mac OS。 OpenCV除了支持单指令多数据(SIMD)指令集外,还通过GPU模块为众多功能提供基于cuda的GPU加速,通过ocl模块提供OpenCL加速。 最近发布的 OpenCV 4.0 带来了许多性能改进和功能,包括流行的 Kinect 融合算法的实现。
就其功能而言,OpenCV 可能需要一个学习过程,这超出了希望通过机器人视觉快速发展的开发人员的耐心。 对于这些开发人员,基于 python 的 SimpleCV 可能也是一个不错的选择。 SimpleCV 建立在 OpenCV 之上,它提供了高级机器人视觉开发人员需要的功能,还提供了一个易于访问的框架,以帮助经验不足的开发人员使用简单的 Python 函数调用探索基本的机器视觉功能。 例如,开发人员可以使用 SimpleCV 图像类中的一个简单的内置方法(下面清单中的 img.binalize())来快速实现图像阈值化等常用功能,最终显示如图 1 所示的结果。
fromSimpleCVimportImage,Color,Display #Makeafunctionthatdoesahalfandhalfimage.defhalfsies(左机器视觉软件开发,右):结果=左#croptherightimagetobejusttherightside.crop=right.crop(right.width/2.0,0,right.width/2.0,right.height)#nowpastethecropontheleftimage.result=结果.blit(crop,(left.width/2,0)) #returntheresults.returnresult#Loadanimagefromimgur.img=Image('#39;) #binarizetheimageusingathresholdof90# and inverttheresults.output=img.binarize(90).invert() #createthesidebysideimage.result=halfsies(img,output)#showtheresultingimage.result.show()#savetheresultstoafile.result.save('juniperbinary.png')
图 1. 上面列出的 Python 代码的结果(来源:SimpleCV)
除了基本的图像处理功能外,OpenCV 和 SimpleCV 还实现了机器人系统处理物体或在物理环境中安全运行所需的许多高级图像处理算法。 许多这些计算中使用的基本数据结构之一是点云——表示对象的多维数据点的集合(图 2)。 从相机获取的对象点云用于基本的机器人操作,例如对象识别、对齐和拟合。 为了处理点云,点云库 (PCL) [源代码] 实现了过滤、拟合、关键点提取、分割等算法。
图 2. 基本环面的点云数据集。