cv::Mat distorted_points = cv::Mat::zeros(1, rows * cols, CV_64FC2); // 一样的,为什么会这样呢? cv::fisheye::distortPoints(undistorted_mat, distorted_points, K, D, 0); // 这里自己写一下吧 确实有些问题 cv::Mat distorted_map = distorted_points; cv::Mat map = distorted_map.reshape(0, rows); map.convertTo(map, CV_32FC2); perspective_map = map;
时间: 2024-04-05 13:34:27 浏览: 119
这段代码是使用OpenCV中的鱼眼畸变校正函数`cv::fisheye::distortPoints()`将一个未校正的图像坐标矩阵转换为校正后的图像坐标矩阵。其中,`rows`和`cols`是图像的行数和列数,`K`和`D`是相机内参和畸变系数,`undistorted_mat`是未校正的图像坐标矩阵。
这段代码中,首先创建了一个大小为`1 x rows*cols`、数据类型为`CV_64FC2`的矩阵`distorted_points`用来存储校正后的图像坐标。接着,使用`cv::fisheye::distortPoints()`函数将未校正的图像坐标转换为校正后的图像坐标,并将结果存储在`distorted_points`中。然后将`distorted_points`矩阵赋值给`distorted_map`矩阵,再使用`reshape()`函数将`distorted_map`矩阵变形为`rows x cols`大小的矩阵,并将数据类型转换为`CV_32FC2`。最终,将变形后的矩阵赋值给`perspective_map`矩阵。
相关问题
cv::Mat distorted_points = cv::Mat::zeros(1, rows * cols, CV_64FC2); // 一样的,为什么会这样呢? cv::fisheye::distortPoints(undistorted_mat, distorted_points, K, D, 0); // 这里自己写一下吧 确实有
几个问题需要解释一下:
1. `cv::Mat::zeros(1, rows * cols, CV_64FC2)` 是创建一个大小为 1x(rows * cols) 的双通道浮点型矩阵,用来存储畸变后的点坐标。其中 `rows` 和 `cols` 是输入矩阵的行数和列数。
2. `cv::fisheye::distortPoints` 是 OpenCV 中用于对鱼眼相机图像进行畸变矫正的函数。它接受输入的二维点坐标矩阵 `undistorted_mat`,相机内参矩阵 `K`,畸变系数向量 `D`,以及一个标量参数 `alpha`,并输出畸变后的点坐标矩阵 `distorted_points`。
3. 在这段代码中,我们将 `undistorted_mat` 作为输入矩阵,`K` 和 `D` 为相机的内参矩阵和畸变系数向量,`0` 为畸变矫正的标量参数,即不进行缩放。输出矩阵 `distorted_points` 是一个 1x(rows * cols) 的矩阵,存储了畸变后的点坐标。
希望这能解答你的问题。
阅读全文