Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 图像上两点之间的实际距离_Python_Matplotlib_Distance - Fatal编程技术网

Python 图像上两点之间的实际距离

Python 图像上两点之间的实际距离,python,matplotlib,distance,Python,Matplotlib,Distance,我在二维空间中有两点: (255.62746737327373, 257.61185343423432) (247.86430198019812, 450.74937623762395) 使用matplotlib在png上绘制它们,结果如下: 现在我想计算这两点之间的实际距离(以米为单位)。我知道图像的真实尺寸是125米x 86米。 我如何才能以某种方式做到这一点?让ImageDim为图像在x和y坐标中的长度。 在这种情况下,它将是ImageDim=(700500),并让StadionDim

我在二维空间中有两点:

(255.62746737327373, 257.61185343423432)
(247.86430198019812, 450.74937623762395)
使用
matplotlib
在png上绘制它们,结果如下:

现在我想计算这两点之间的实际距离(以米为单位)。我知道图像的真实尺寸是125米x 86米。
我如何才能以某种方式做到这一点?

ImageDim
为图像在x和y坐标中的长度。 在这种情况下,它将是
ImageDim=(700500)
,并让
StadionDim
是体育场的长度<代码>体育场=(125,86) 因此,计算图像中体育场点的函数为:

def calc(ImageDim, StadionDim, Point):
    return (Point[0] * StadionDim[0]/ImageDim[0], Point[1] * StadionDim[1]/ImageDim[1])
所以现在在体育场你可以得到两分。计算距离:

Point_one = calc((700,500), (125,86), (257, 255))
Point_two = calc((700,500), (125,86), (450, 247))
Distance = sqrt((Point_one[0]-Point_two[0])**2 + (Point_one[1]-Point_two[1])**2)

我相信你的输入坐标是在世界空间。但是,如果在不进行任何缩放的情况下打印图像,则图像空间中的打印坐标将从左下角的(0,0)到右下角的(图像宽度、图像高度)。所以,要将点正确地绘制到图像上,就需要将它们转换到图像空间,反之亦然,当需要进行任何真实世界的空间计算时。我想你不会想计算足球的速度,比如说,以每秒像素为单位,而是以每秒米为单位

那么,为什么不在世界坐标系中绘制图像以避免两个空间坐标转换的痛苦呢?在matplotlib中可以轻松地完成此操作。使用
范围
参数

范围:标量(左、右、下、上),可选,默认值:无

以数据坐标表示的左下角和右上角的位置。如果没有,则定位图像,使像素中心位于基于零(行、列)的索引上

例如:

imshow(imade_data, origin='upper',extent=[0, 0, field_width, field_height]);
然后,您可以在图像上以世界坐标绘制点。此外,距离计算也将变得清晰:

import math;
dx = x2-x1;
dy = y2-y1;
distance = math.sqrt(dx*dx+dy*dy);

将毕达哥拉斯定理与deltax和deltay结合使用。将三角洲平方,相加,取平方根。这个距离=sqrt(pow((xMP-xMM),2)+pow((yMP-yMM),2))?这并不是以米为单位的真实距离。您可以在Python中使用
a**b
而不是
pow(a,b)
。在这种情况下,它将是
a**2
。它给出两个点之间的距离,不以米为单位,它以
x
y
值所用的相同单位给出。将它们转换为米,然后计算距离。这些单位将被保留。