繁体   English   中英

使用 opencv/c++ 将像素转换为 mm --> 两点之间的距离

[英]Convert pixels to mm with opencv/c++ --> Distance between two points

我有两个点 p1(x1, y1) 和 p2(x2, y2)。 两者都是二维平面图中两个圆的中心。 在用户用智能手机拍摄的照片中会自动检测到这两个圆圈。

由于某些原因,我想测量 p1 和 p2 之间的距离(以米为单位)。

我完全不知道我该怎么做。 我确实看过 calib3D 模块,但我认为我没有发现任何有用的东西。

相机和圆圈之间的距离可能会有所不同,并且是恒定的,我认为这是我们可以关注的参数? 用于计算两个中心的距离。

有没有一种特殊的方法来做这样的事情? 如果您有任何方法可以帮助我,我将不胜感激。

谢谢,祝你有美好的一天。

雨果

您需要使用增强现实工具包。 没有什么能解决问题,除非你的问题有限制,使它比说的更简单。

此类工具包可用于 Apple 和 Android 移动平台。

你自己尝试实现增强现实的核心是没有意义的。 对该理论的一些理解确实有助于使用工具包。

好吧,

以下是解决方案的步骤:

I) 首先做一个正交规划。

我需要两个建立一个正交计划,我将在其中计算 2 个点之间的距离。

我需要知道以厘米为单位的距离,我有一张以像素为单位的图片,所以我需要知道一个像素是多少厘米。

在我的例子中,图片是 2498 x 1570 像素。 当我用尺子在纸上测量好的角落时:

2498 像素 = 18.2 厘米和 1570 像素 = 11.4 厘米。

通过这些数据,我们知道 1 px =~ 0.0073 厘米。 (18.2 / 2498 =~ 0.0073)。 (11.4 / 1570 =~ 0.0073)

II) 正交平面中的距离公式

double Operation::distanceBetween2Points(Point A, Point B){

    double coeff = 0.0073;
    double diffx = (B.x - A.x) * coeff;
    double diffy = (B.y - A.y) * coeff;

    return sqrt(pow(diffx, 2) + pow(diffy,2));
}

我发现与现实相符的距离等于 0.61005 厘米(= 0.6 厘米)。

我进行了几次测试,它每次都有效,与现实相符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM