图像上两点之间的实际距离
Real distance between two points over image
我在 2D 中有两个点 space:
(255.62746737327373, 257.61185343423432)
(247.86430198019812, 450.74937623762395)
用 matplotlib
在 png 上绘制它们我得到了这个结果:
现在我想计算这两点之间的实际距离(以米为单位)。我知道该图像的实际尺寸是 125 米 x 86 米。
我怎样才能以某种方式做到这一点?
令 ImageDim
为图像在 x 和 y 坐标中的长度。
在这种情况下,它将是 ImageDim = (700, 500)
,并令 StadionDim
是体育场的长度。 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)
我相信你输入的坐标在世界 space 中。但是当你在没有任何缩放的情况下绘制图像时,你将在图像 space 中从左下角的 (0,0) 到右下角的 (image_width, image_height) 绘制坐标.因此,要将您的点正确绘制为图像,需要将它们转换为图像 space,反之亦然,当需要完成任何现实世界 space 计算时。我想你不想计算让我们说足球速度以每秒像素为单位,但以米为单位。
那么为什么不在世界坐标中绘制图像以避免两个 space 坐标转换的痛苦呢?您可以在 matplotlib 中轻松完成。使用 extent
参数。
extent : scalars (left, right, bottom, top), optional, default: None
The location, in data-coordinates, of the lower-left and upper-right corners. If None, the image is positioned such that the pixel centers fall on zero-based (row, column) indices.
例如这样:
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);
我在 2D 中有两个点 space:
(255.62746737327373, 257.61185343423432)
(247.86430198019812, 450.74937623762395)
用 matplotlib
在 png 上绘制它们我得到了这个结果:
现在我想计算这两点之间的实际距离(以米为单位)。我知道该图像的实际尺寸是 125 米 x 86 米。 我怎样才能以某种方式做到这一点?
令 ImageDim
为图像在 x 和 y 坐标中的长度。
在这种情况下,它将是 ImageDim = (700, 500)
,并令 StadionDim
是体育场的长度。 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)
我相信你输入的坐标在世界 space 中。但是当你在没有任何缩放的情况下绘制图像时,你将在图像 space 中从左下角的 (0,0) 到右下角的 (image_width, image_height) 绘制坐标.因此,要将您的点正确绘制为图像,需要将它们转换为图像 space,反之亦然,当需要完成任何现实世界 space 计算时。我想你不想计算让我们说足球速度以每秒像素为单位,但以米为单位。
那么为什么不在世界坐标中绘制图像以避免两个 space 坐标转换的痛苦呢?您可以在 matplotlib 中轻松完成。使用 extent
参数。
extent : scalars (left, right, bottom, top), optional, default: None
The location, in data-coordinates, of the lower-left and upper-right corners. If None, the image is positioned such that the pixel centers fall on zero-based (row, column) indices.
例如这样:
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);