dar*_*ang 5 html javascript jquery image image-processing
我正在尝试计算粘贴在我知道尺寸的面板上的纸张的实际尺寸。这是一个小例子:\n
当在面板前面拍摄图片时,我的程序运行良好,我得到 0.416 * 0.294,而我的工作表的实际尺寸是 0.420 * 0.297,这是非常令人满意的。您可以在这里尝试我的代码。\n下面是我为计算所做的函数
\n\nwindow.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}\nRun Code Online (Sandbox Code Playgroud)\n\n现在我正在尝试做完全相同的事情,但是当照片不是在面板前面拍摄时,就像这样:\n
\n您可以在此处尝试使用此图像相同的代码
通过此图像,我得到的纸张尺寸为 0.405*0.254,虽然不是那么远,但还不够好。我想要更准确的东西,但我不知道该怎么做,我想我可能需要考虑更多参数,但我对摄影不太了解,而且我有点迷失在这里。
\n\n任何帮助将不胜感激 :)
\n\n编辑:由于没有任何答案,而且我在谷歌上搜索没有成功,我开始认为我没有足够的数据来进行这样的计算。\n现在如果:
\n\n你必须找到视角的消失点,并用它来计算平行线的交叉比。请参阅此问题了解更多详细信息。
正如答案中所说,您的第一个示例之所以有效,是因为:
如果给定线的消失点位于无穷远,就像图片中的水平线一样,那么它们仅受仿射变换的影响,因此透视投影保留了这些线的长度比率。
对于第二个示例,您必须使用答案中给出的方法。
假设您有一个坐标系,其原点为 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。
您必须沿着蓝线对另一个方向执行相同的操作。
如果您的图纸未与面板方向对齐,则只需计算面板轴定义的坐标系中每个角的坐标即可。原理保持不变。