小编Nit*_*hin的帖子

使用opencv C++、SolvePnP函数进行相机姿态估计

我正在尝试测量相机的姿势,我已经完成了以下操作。

  1. 标记世界 3-D(假设 z=0,因为它是平的)点在平面上正方形的角上,并假设一个世界坐标系。(以厘米为单位)

将正方形的左上角作为我的原点,并按以下顺序给出世界点(x,y)或(col,row):(0,0),(12.8,0),(12.8,12.8) ,(0,12.8) - 厘米

  1. 检测图像中的那些点。(以像素为单位)图像点和世界点的顺序相同。

  2. 我已经针对内在矩阵失真系数校准了我的相机。

  3. 我使用SolvePnP函数来获取 rvec 和 tvec。

  4. 我使用Rodrigues函数来获取旋转矩阵。

  5. 为了检查 rvec 和 tvec 是否正确,我使用ProjectPoints将 3-D 点(z=0)投影回图像平面,并且我在图像上正确获得了点,X 轴上的误差为 3 个像素。

  6. 现在我继续使用公式计算我的相机在世界框架中的位置:

cam_worl_pos = - inverse(R) * tvec。(这个公式我已经在很多博客中验证过,这也是有道理的)

  1. 但是我在 cms 中的cam_worl_pos x、y 和 z 似乎不正确。

我的疑问是,如果我能够使用 rvec 和 tvec 将 3-D 世界点投影回图像平面(X 轴上3 个像素错误,Y 轴上几乎没有错误,希望它不会太糟糕),然后为什么我没有在世界框架中获得正确的相机位置。

另外,我对 SolvPnP rvec 和 tvec 解决方案有疑问,它们可能是多种解决方案之一,但不是我想要的。

我如何从 SolvPnp 获得正确的 rvec 和 tvec 或任何其他获得 rvec 和 …

opencv computer-vision

5
推荐指数
0
解决办法
3974
查看次数

简单的 C++ 两线程问题(线程应用程序比顺序慢)

我正在尝试使用 CPP 线程添加偶数和奇数,代码如下所示

typedef unsigned long long ull;


ull EvenSum = 0;
ull OddSum = 0;

void find_Evensum(ull start, ull end)
{
    for(ull i=start;i<=end;i++)
    {
        if((i&1) == 0)
        {
            EvenSum+=i;
        }
    }

}




void find_Oddsum(ull start, ull end)
{

    for(ull i=start;i<=end;i++)
    {
        if((i&1) == 1)
        {
            OddSum+=i;
        }
    }

}



int main()
{

    ull start = 0;
    ull end = 1900000000;

    auto start_time = high_resolution_clock::now();

#if 0
    thread t1(find_Evensum, start, end);
    thread t2(find_Oddsum, start, end);

    t1.join();
    t2.join();

#else
    find_Evensum(start, end); …
Run Code Online (Sandbox Code Playgroud)

c++ performance multithreading

0
推荐指数
1
解决办法
106
查看次数