2017视觉程序示例
LabVIEW
其他LabVIEW范例随附2017 LabVIEW Vision范例。在启动屏幕上,单击支持->查找FRC | reg |。示例或在任何其他LabVIEW窗口中,单击帮助->查找示例,然后找到Vision文件夹以查找2017 Vision示例。示例图像与示例捆绑在一起。
C++/Java
我们提供打包成ZIP文件的一个GRIP项目,其中包括项目描述以及示例图像。可以在TeamForge <https://usfirst.collab.net/sf/frs/do/viewRelease/projects.wpilib/frs.sample_programs.2017_c_java_vision_sample>中找到ZIP文件。
参见:ref: ‘docs/software/vision-processing/grip/ use -generated-code in-a- Robot - Program:Using Generated Code in a Robot - Program ‘,了解如何在机器人程序中整合GRIP生成代码的详细信息。
内置的GRIP项目生成的代码将使用OpenCV在图像中找到绿色物体的轮廓,就如此ZIP的Vision images文件夹中所包含的图像那样。之后,您可能希望进一步处理这些轮廓,以评估它们是否是目标。为此:
使用boundingRect方法在边缘轮廓周围绘制外接矩形
LabVIEW示例代码为此目标计算5个单独的比率。每个比率名义上应该等于1.0。为此,它按大小对轮廓进行排序,然后从最大的开始,对每一对可能是目标的轮廓进行值计算,并在找到目标或返回它找到的最佳对时停止。
下面公式中,每个字母代表外接矩形的一个指标(H =高,L=左,T=上,B=下,W=宽),数字下标为等高值(1为最大轮廓,2为第二大轮廓,以此类推)。
最大高度应占总高度的40%(4英寸/ 10英寸):
底部边顶部至顶部边顶部应为总高度的60%(6 英寸/10 英寸):
轮廓1左缘到轮廓2左缘的距离相对于第一个轮廓的宽度应较小;然后我们加1以使比值达到1:
两个轮廓的宽度应大致相同:
较大的边应该是较小边的两倍高
然后通过计算,将每个比率转化为0-100分:
测量顶部外接矩形的顶部到底部外接矩形的底部的像素长度,来确定距离:
LabVIEW的例子使用了高度来确定距离,因为圆形目标的边缘在检测中最容易产生噪声(因为角度点离摄像机越远,颜色看起来越不显绿)。这样做的缺点是,图像中目标的像素高度会受到相机角度的透视失真的影响。可能的方法包括:
尝试使用宽度来代替
实地测量物体在不同距离时的高度,并创建一个查阅表或回归方程
安装相机到一个伺服电机上,使目标在垂直方向上置中,并使用伺服电机的角度计算距离(你将不得不靠自己或者找数学老师帮助解决合适的三角问题!)
使用OpenCV校正透视失真。要做到这一点,你需要用OpenCV<https://docs.opencv.org/3.4.6/d4/d94/tutorial_camera_calibration.html>`来校准你的相机。这将生成一个变形矩阵和相机矩阵。您将使用这两个矩阵和undistortPoints方法来将您想要测量的点映射到“实际的”坐标(这比未失真的整个图像要少很多CPU消耗)