javascript - 计算图片内对象的大小

标签 javascript jquery html image image-processing

我正在尝试计算贴在我知道尺寸的面板上的纸张的实际尺寸。这是一个小例子: enter image description here

当在面板前拍摄照片时,我的程序工作正常,我得到 0.416 * 0.294,而我的工作表的实际尺寸是 0.420 * 0.297,这非常令人满意。你可以试试我的代码here . 下面是我为计算所做的功能

window.calculer = function(){


//-------------Calcul de X ---------------------------------------------------------------------------


ag_distance_x_metres=0.9;


ag_delta_x=x2-x1;                                                                       // Calcul des ag_delta_x et ag_delta_y 
ag_delta_y=y2-y1;


ag_distance_x_pixels=Math.sqrt(Math.pow(ag_delta_x, 2) + Math.pow(ag_delta_y, 2));      // Calcul de la distance x en pixels


ag_rapport_x = ag_distance_x_pixels/ag_distance_x_metres;                               // Calcul du rapport taille pixel / taille mètres 


ag_delta_X = x5-x4;                                                                     // Calcul des ag_delta_X et ag_delta_Y 
ag_delta_Y = y5-y4;


ag_distance_X_pixels=Math.sqrt(Math.pow(ag_delta_X, 2) + Math.pow(ag_delta_Y, 2));      // Calcul de la distance X en pixels


ag_distance_X_metres=ag_distance_X_pixels/ag_rapport_x;                                 // Calcul de la distance X en mètres
alert("ag_distance_X_metres = "+ ag_distance_X_metres);


//-------------Calcul de Y -----------------------------------------------------------------------------

ag_distance_y_metres=1.20;


ag_delta_x=x3-x2;                                                                       // Calcul des ag_delta_x et ag_delta_y 
ag_delta_y=y3-y2;


ag_distance_y_pixels=Math.sqrt(Math.pow(ag_delta_x, 2) + Math.pow(ag_delta_y, 2));      // Calcul de la distance y en pixels



ag_rapport_y = ag_distance_y_pixels/ag_distance_y_metres;                               // Calcul du rapport taille pixel / taille mètres 



ag_delta_X = x6-x5;                                                                     // Calcul des ag_delta_X et ag_delta_Y 
ag_delta_Y = y6-y5;


ag_distance_Y_pixels=Math.sqrt(Math.pow(ag_delta_X, 2) + Math.pow(ag_delta_Y, 2));      // Calcul de la distance Y en pixels


ag_distance_Y_metres=ag_distance_Y_pixels/ag_rapport_y;                                 // Calcul de la distance Y en mètres
alert("ag_distance_Y_metres = "+ ag_distance_Y_metres);

}

现在我正在尝试做完全相同的事情,但是当照片不是在面板前拍摄时,就像这样: enter image description here 您可以使用此图像尝试相同的代码 here

对于这张图片,我的工作表尺寸为 0.405*0.254,虽然不是那么远,但还不够好。我想要更准确的东西,但我不知道该怎么做,我想我可能需要考虑更多参数,但我对摄影知之甚少,我有点迷路了。

任何帮助将不胜感激:)

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

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

最佳答案

你必须找到 vanishing points你的观点,并用它来计算 cross-ratio的平行线。参见 this question了解更多详情。


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

If the vanishing point of a given line is at infinity, like for the horizontal lines in your picture, then they are only subject to an affine transformation, so ratios of lengths on these lines are preserved by the perspective projection.

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

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

交叉比率 CR(A,O;B,C)((A-B)/(A-C))/((O-B)/(O-C)) = 0.189,与 A = -317px(调整后图片中 O 到 A 的距离),B = 166C = 22D = 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

你必须按照蓝线对另一个方向做同样的事情。

如果您的工作表未与面板方向对齐,您只需计算面板轴定义的坐标系中每个 Angular 的坐标。原理还是一样的。

关于javascript - 计算图片内对象的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42509641/

相关文章:

javascript - 如何增加span元素内的文本

php - 简单的 jQuery - php 通信

javascript - 循环浏览多个表中的数据页的最佳方法?

javascript - 设置 bluebird.js promise 解析的最小延迟

javascript - 按钮 - 使用按钮放大矩形

javascript - 响应元素高度应等于宽度

javascript - jQuery UI 可排序连接列表 css 问题

javascript - 子div向上滑动后如何保持父div的高度不变?

javascript - 给出一个调用函数的对象

html - gmail源码是怎么改造的?