相关疑难解决方法(0)

将 2D 图像坐标转换为 z = 0 的 3D 世界坐标

  • OpenCV => 3.2
  • 操作系统/平台 => Windows 64 位
  • 编译器 => Visual Studio 2015

我目前正在开展我的项目,该项目涉及车辆检测和跟踪以及估计和优化车辆周围的长方体。为此,我已经完成了车辆的检测和跟踪,我需要找到车辆边界框边缘图像点的3D世界坐标,然后估计长方体和项目边缘的世界坐标它返回图像以显示它。

所以,我是计算机视觉和 OpenCV 的新手,但据我所知,我只需要图像上的 4 个点,需要知道这 4 个点的世界坐标,并在 OpenCV 中使用 solvePNP 来获得旋转和平移向量(我已经有相机矩阵和失真系数)。然后,我需要使用 Rodrigues 将旋转向量转换为旋转矩阵,然后将其与平移向量连接以获得我的外在矩阵,然后将外在矩阵与相机矩阵相乘以获得我的投影矩阵。由于我的 z 坐标为零,因此我需要从投影矩阵中删除第三列,该矩阵给出了用于将 2D 图像点转换为 3D 世界点的单应矩阵。现在,我找到了单应矩阵的逆矩阵,它给出了 3D 世界点到 2D 图像点之间的单应性。

我的代码如下所示:

#include "opencv2/opencv.hpp"
#include <stdio.h>
#include <iostream>
#include <sstream>
#include <math.h> 
#include <conio.h>

using namespace cv;
using namespace std;

Mat cameraMatrix, distCoeffs, rotationVector, rotationMatrix, 
translationVector,extrinsicMatrix, projectionMatrix, homographyMatrix, 
inverseHomographyMatrix;


Point point;
vector<Point2d> image_points;
vector<Point3d> world_points;

int main()
{
FileStorage fs1("intrinsics.yml", FileStorage::READ);

fs1["camera_matrix"] >> cameraMatrix; …
Run Code Online (Sandbox Code Playgroud)

c++ opencv computer-vision homography visual-studio

9
推荐指数
1
解决办法
5410
查看次数

OpenCv C++透视变换

我试图使用OpenCv来校正图像的失真,然后计算给定像素坐标的真实世界坐标.我无法在线或在OpenCv书中找到任何有关如何执行此操作的示例.

我用国际象棋棋盘图像完成了相机校准.现在,我只需要一个基本功能,我可以给出像素坐标,它将根据相机矩阵,失真系数,旋转和平移向量给出真实世界坐标.

有谁知道如何做到这一点?

c++ camera opencv camera-calibration

3
推荐指数
2
解决办法
1万
查看次数