使用Python

时间:2017-02-11 17:45:26

标签: python opencv image-processing 3d

我试图从图像估计汽车的尺寸(在这种情况下是宽度)。我有3个不同的图像(不同的角度)如下所示。我已经使用基本的东西来确定图像的精确边缘,结果也显示在下面的图像中。这是我每辆车的基本代码:

file = 'image.jpg'
img = cv2.imread(file, cv2.IMREAD_COLOR)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
bilateral = cv2.bilateralFilter(gray, 9, 75, 75)
canny = cv2.Canny(bilateral, 50, 255)
cv2.imshow('Canny Image', canny)
cv2.waitKey(0)

Original images from different angles

Canny image results

现在,如果我使用cv2.goodFeaturesToTrack()cv2.cornerHarris()检测角落,则下图显示我得到的结果非常奇怪,以蓝点显示。enter image description here

我研究过如果我们想要从2D图像计算物体的尺寸,我们至少需要2张图像,就像我们的眼睛一样。现在,根据给定的场景,我如何找到汽车的宽度(即从背光左角到背光右角的真实世界距离)?我有从相机到汽车的距离,并且每个摄像机位置之间也有距离。 另外,如果这些(或相关的)工作已经作为python或任何其他语言的开源存在,请告诉我?感谢。

1 个答案:

答案 0 :(得分:0)

您使用的传统CV算法无法解决问题,因为您的角在平面背景中将是准确的。
我建议您使用2D对象检测算法,从那里您将获得图像空间中对象的高度和宽度,即像素长度。
对于获得的世界空间宽度,请使用相机校准转换等。

此答案可能会为您提供帮助。 https://stackoverflow.com/questions/13419605/how-to-map-x-y-pixel-to-world-cordinates#:~:text=1%20Answer&text=If%20you%20have%20x%2Cy,then%20by%20your%20z_world%20coordinate