c# - 像素坐标到 3D 线(opencv)

标签 c# c++ opencv computer-vision camera-calibration

我在屏幕上显示了一张图像,该图像通过 cvInitUndistortMap 和 cvRemap(已完成相机校准)未失真,用户单击图像中的一个特征。所以我有特征的 (u,v) 像素坐标,还有本征矩阵和畸变矩阵。

我正在寻找的是相机/真实世界坐标中的 3D 线方程,用户点击的要素必须位于该坐标上。我已经知道相机的图像平面与特征之间的垂直距离,因此我可以将其与上述方程结合,得到特征在空间中的 (X,Y,Z) 坐标。

听起来很简单(逆固有矩阵之类的?)但我无法在任何地方找到分步说明。首选 C++ 或 C# 代码。

最佳答案

这是一个有点老的问题,但对某些人来说仍然有用。 所有的线都经过点 (0,0,0),所以:

line.x0 = 0; 线.y0 = 0; line.z0 = 0;

方向 vector 如下: line.A = (u/fx) - (cx/fx); line.B = (v/fy) - (cy/fy); 行.C = 1;

cx,cy,fx,fy 是相机矩阵的参数。 《学习 OpenCv》一书中解释了方程。

关于c# - 像素坐标到 3D 线(opencv),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3107771/

相关文章:

opencv - 如何使用 cv::warpPerspective 进行透视变换?

C# Json.Net 序列化具有虚拟属性的实体

c++ - 在 C++ 中将指针传递给函数

python - plt.imsave 保存图像不正确

c++ - Qwt关闭轴标签的科学记数法

C++ 用非静态函数重载静态函数

c++ - 在 OpenCV 中从 RGB 转换为 YUYV

c# - 使用 .NET C# 绘制实时数据图表

c# - dotnet 核心数据库首先使用 NetTopologySuite

c# - WPF - 创建颜色网格