计算图片内物体的大小

dar*_*ang 5 html javascript jquery image image-processing

我正在尝试计算粘贴在我知道尺寸的面板上的纸张的实际尺寸。这是一个小例子:\n在此输入图像描述

\n\n

当在面板前面拍摄图片时,我的程序运行良好,我得到 0.416 * 0.294,而我的工作表的实际尺寸是 0.420 * 0.297,这是非常令人满意的。您可以在这里尝试我的代码。\n下面是我为计算所做的函数

\n\n
window.calculer = function(){\n\n\n//-------------Calcul de X ---------------------------------------------------------------------------\n\n\nag_distance_x_metres=0.9;\n\n\nag_delta_x=x2-x1;                                                                       // Calcul des ag_delta_x et ag_delta_y \nag_delta_y=y2-y1;\n\n\nag_distance_x_pixels=Math.sqrt(Math.pow(ag_delta_x, 2) + Math.pow(ag_delta_y, 2));      // Calcul de la distance x en pixels\n\n\nag_rapport_x = ag_distance_x_pixels/ag_distance_x_metres;                               // Calcul du rapport taille pixel / taille m\xc3\xa8tres \n\n\nag_delta_X = x5-x4;                                                                     // Calcul des ag_delta_X et ag_delta_Y \nag_delta_Y = y5-y4;\n\n\nag_distance_X_pixels=Math.sqrt(Math.pow(ag_delta_X, 2) + Math.pow(ag_delta_Y, 2));      // Calcul de la distance X en pixels\n\n\nag_distance_X_metres=ag_distance_X_pixels/ag_rapport_x;                                 // Calcul de la distance X en m\xc3\xa8tres\nalert("ag_distance_X_metres = "+ ag_distance_X_metres);\n\n\n//-------------Calcul de Y -----------------------------------------------------------------------------\n\nag_distance_y_metres=1.20;\n\n\nag_delta_x=x3-x2;                                                                       // Calcul des ag_delta_x et ag_delta_y \nag_delta_y=y3-y2;\n\n\nag_distance_y_pixels=Math.sqrt(Math.pow(ag_delta_x, 2) + Math.pow(ag_delta_y, 2));      // Calcul de la distance y en pixels\n\n\n\nag_rapport_y = ag_distance_y_pixels/ag_distance_y_metres;                               // Calcul du rapport taille pixel / taille m\xc3\xa8tres \n\n\n\nag_delta_X = x6-x5;                                                                     // Calcul des ag_delta_X et ag_delta_Y \nag_delta_Y = y6-y5;\n\n\nag_distance_Y_pixels=Math.sqrt(Math.pow(ag_delta_X, 2) + Math.pow(ag_delta_Y, 2));      // Calcul de la distance Y en pixels\n\n\nag_distance_Y_metres=ag_distance_Y_pixels/ag_rapport_y;                                 // Calcul de la distance Y en m\xc3\xa8tres\nalert("ag_distance_Y_metres = "+ ag_distance_Y_metres);\n\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在我正在尝试做完全相同的事情,但是当照片不是在面板前面拍摄时,就像这样:\n在此输入图像描述\n您可以在此处尝试使用此图像相同的代码

\n\n

通过此图像,我得到的纸张尺寸为 0.405*0.254,虽然不是那么远,但还不够好。我想要更准确的东西,但我不知道该怎么做,我想我可能需要考虑更多参数,但我对摄影不太了解,而且我有点迷失在这里。

\n\n

任何帮助将不胜感激 :)

\n\n

编辑:由于没有任何答案,而且我在谷歌上搜索没有成功,我开始认为我没有足够的数据来进行这样的计算。\n现在如果:

\n\n
    \n
  • 我有焦距和传感器尺寸
  • \n
  • 我有相机和点 1,2 和 3 之间的距离
  • \n
  • 我两个都有
  • \n
\n

Gwe*_*wen 3

你必须找到视角的消失点,并用它来计算平行线的交叉比。请参阅此问题了解更多详细信息。


正如答案中所说,您的第一个示例之所以有效,是因为:

如果给定线的消失点位于无穷远,就像图片中的水平线一样,那么它们仅受仿射变换的影响,因此透视投影保留了这些线的长度比率。

对于第二个示例,您必须使用答案中给出的方法。

假设您有一个坐标系,其原点为 O(面板的一侧),x 轴(与 O 的消失点方向相反)。A 是消失点,B 是面板的另一侧,C 和 D 是 x 轴与板材的交点。 坐标系

交比CR(A,O;B,C)((A-B)/(A-C))/((O-B)/(O-C)) = 0.189, 与 A = -317px(调整大小后的图片中从 O 到 A 的距离), B = 166, C = 22,D = 92.
因此,既然您知道OB = 90cm,则有OC = 0.189 * 90 = 17 cm
对于OD, CR(A,O;B,D) = 0.654,所以你有OD = 0.654 * 90 = 58.9
因此,CD = OD - OC = 41.9 cm

您必须沿着蓝线对另一个方向执行相同的操作。

如果您的图纸未与面板方向对齐,则只需计算面板轴定义的坐标系中每个角的坐标即可。原理保持不变。