我目前正在开展我的项目,该项目涉及车辆检测和跟踪以及估计和优化车辆周围的长方体。为此,我已经完成了车辆的检测和跟踪,我需要找到车辆边界框边缘图像点的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) 我试图使用OpenCv来校正图像的失真,然后计算给定像素坐标的真实世界坐标.我无法在线或在OpenCv书中找到任何有关如何执行此操作的示例.
我用国际象棋棋盘图像完成了相机校准.现在,我只需要一个基本功能,我可以给出像素坐标,它将根据相机矩阵,失真系数,旋转和平移向量给出真实世界坐标.
有谁知道如何做到这一点?