【问题标题】:Computing real world distance using pixel distance使用像素距离计算真实世界的距离
【发布时间】:2020-07-29 19:27:27
【问题描述】:

我有两张图片为here a vehicle entered the region,另一张图片为here vehicle exited the region

我使用安装在道路上的单个闭路电视摄像机拍摄了这些图像。

现在我想计算它在现实世界中行驶的距离,以找出车辆的速度。我使用对象检测来获取两个图像中车牌的边界框,我可以计算像素距离。只有当图像平面和道路平面相互平行时,我才能将像素距离映射到现实世界(我正在使用这种技术,但它没有给出准确的结果)。由于我的相机与道路成一定角度倾斜,因此我无法使用该技术。

我尝试了几篇研究论文,但找不到与我的问题相关的任何有用信息。有人请分享有关这样做的见解,这将有所帮助。

【问题讨论】:

    标签: computer-vision opencv3.0 opencv-python


    【解决方案1】:

    在这个问题中,我们有单个相机视图,因此您无法使用相机视图几何找到对象之间的真实世界距离。虽然我们可以通过考虑某些具有已知长度值的参考对象以现实世界单位将图像像素转换为现实世界单位。

    在捕获的示例图像中,您可以识别如下图所示的道路车道标记,并了解它们在现实世界单位中的长度,您可以找到像素到现实世界的距离。

    以下是道路车道标记检测方法的快速基本实现。这还将为您提供图像中的汽车、自行车等对象的轮廓,但是一旦您知道它们的对象边界框,您就可以通过在这些对象上应用蒙版来移除这些轮廓。

    img = cv2.imread("road_lane.jpg")
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    blur = cv2.blur(gray, (3, 3))
    # Find Canny edges
    edged = cv2.Canny(blur, 30, 200)
    
    # Finding Contours
    contours, hierarchy = cv2.findContours(edged, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
    boundRect = []
    for i, c in enumerate(contours):
        #ignore large and small contours
        if len(c) < 300 and len(c) > 100 :
            box = cv2.boundingRect(c)
            #check for vertical rectangles
            if box[2] < box[3]:
               boundRect.append(box)
    
    for i in range(len(boundRect)):
        cv2.rectangle(img, (int(boundRect[i][0]), int(boundRect[i][1])), (int(boundRect[i][0] + boundRect[i][2]), int(boundRect[i][1] + boundRect[i][3])), (255, 0, 0), 5)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多