基于计算机视觉的实时摄像头形状距离计算

Posted

技术标签:

【中文标题】基于计算机视觉的实时摄像头形状距离计算【英文标题】:Live camera to shape distance calculation based on computer vision 【发布时间】:2020-01-01 14:02:45 【问题描述】:

目标是实时检测墙壁并将距离导出到墙壁。有一个设置,一个封闭的 4 面墙,每面墙上有一组独特且理想的形状(三角形,正方形......)一个机器人带摄像头的将在墙壁内漫游并具有计算机视觉。机器人应检测形状并导出相机与墙壁(或该形状)之间的距离。

我已经通过 Opencv 和形状检测 (cv2.approxPolyDP) 和距离计算(周长计算和边缘计数,然后将像素长度转换为实际距离)实现了这个目标。

它在 90 度角时完美工作,但在其他角度时无效。

任何更好的方法。

谢谢

for cnt in contours[1:]:
# considering countours from 1 because from practical experience whole frame is often considered as a contour
        area = cv2.contourArea(cnt)
        # area of detected contour
        approx = cv2.approxPolyDP(cnt, 0.02*cv2.arcLength(cnt, True), True)
        #It predicts and makes pixel connected contour to a shape
        x = approx.ravel()[0]
        y = approx.ravel()[1]
        # detected shape type label text placement 
        perimeter = cv2.arcLength(cnt,True)
        # find perimeter

【问题讨论】:

【参考方案1】:

在其他角度,您可以看到形状的透视图。

您必须使用Geometric Transformations 来中和透视效果(使用已知形状的对象或相机角度)。

还考虑到强烈建议使用校正图像Camera Calibration。


编辑:

假设您的墙上有一个正方形。当相机从物体的非 90 度直视视角捕捉图像时。正方形不对齐,看起来变形,这会导致测量误差。

但你可以使用cv2.getPerspectiveTransform()。该函数计算透视变换M的3x3矩阵。

之后使用warped = cv2.warpPerspective(img, M, (w,h)) 并对图像应用透视变换。现在正方形(在warped 图像中)看起来像 90 度直视图,并且您当前的代码在输出图像(warped 图像)上运行良好。

请原谅我的错误解释。也许这篇博文可以帮助你:

4 Point OpenCV getPerspective Transform Example

Find distance from camera to object/marker using Python and OpenCV

【讨论】:

嗨。你能解释一下函数或算法的前景吗? @saran ,我编辑我的答案。我希望这会对你有所帮助。

以上是关于基于计算机视觉的实时摄像头形状距离计算的主要内容,如果未能解决你的问题,请参考以下文章

机器视觉系统是由哪些部分组成的

[AutoCars]基于计算机视觉的无人车感知

数据标注在无人机领域中的具体应用丨曼孚科技

云上的计算机视觉

双目立体视觉

今天大佬教你用Python3-OpenCV实现实时摄像头人脸检测