Computer vision 利用像素距离计算真实世界距离

Computer vision 利用像素距离计算真实世界距离,computer-vision,opencv3.0,opencv-python,Computer Vision,Opencv3.0,Opencv Python,我有两个图像为,另一个图像为 我用一台安装在道路上的闭路电视摄像机拍摄了这张照片 现在我想计算它在现实世界中行驶的距离,以找到车辆的速度。我使用目标检测得到两幅图像中车牌的边界框,通过计算像素距离。只有当图像平面和道路平面彼此平行时,我才能将像素距离映射到真实世界(我正在使用这种技术,但它不能给出准确的结果)。因为我的相机与道路成一定角度,所以我无法使用这种技术 我尝试了几篇研究论文,但找不到任何与我的问题相关的有用信息。有人请分享做这件事的见解,这将是有益的 在这个问题中,我们只有一个摄影机视

我有两个图像为,另一个图像为

我用一台安装在道路上的闭路电视摄像机拍摄了这张照片

现在我想计算它在现实世界中行驶的距离,以找到车辆的速度。我使用目标检测得到两幅图像中车牌的边界框,通过计算像素距离。只有当图像平面和道路平面彼此平行时,我才能将像素距离映射到真实世界(我正在使用这种技术,但它不能给出准确的结果)。因为我的相机与道路成一定角度,所以我无法使用这种技术


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

在这个问题中,我们只有一个摄影机视图,因此无法使用摄影机视图几何体找到对象之间的真实世界距离。虽然我们可以将图像像素转换为真实世界单位,但我们可以考虑某些参考对象,这些对象的长度值以真实世界单位表示

在捕获的示例图像中,您可以识别道路车道标记,如下图所示,并且知道它们的长度(以真实世界为单位),您可以找到像素到真实世界的距离

下面是道路车道标记检测方法的快速基本实现。这也将为您提供图像中汽车、自行车等对象的轮廓,但您可以在了解这些对象的对象边界框后,通过在这些对象上应用遮罩来删除这些轮廓

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)
img=cv2.imread(“road\u lane.jpg”)
灰色=cv2.CVT颜色(img,cv2.COLOR\U BGR2GRAY)
模糊=cv2。模糊(灰色,(3,3))
#寻找精明的边缘
边缘=cv2.Canny(模糊,30200)
#寻找等高线
轮廓,层次=cv2.查找轮廓(边缘,cv2.RETR\u外部,cv2.链约\u无)
boundRect=[]
对于枚举中的i,c(等高线):
#忽略大小轮廓
如果len(c)<300且len(c)>100:
box=cv2.boundingRect(c)
#检查垂直矩形
如果框[2]<框[3]:
boundRect.append(框)
对于范围内的i(len(boundRect)):
cv2.矩形(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)