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 10:34:27 浏览: 110
失真::test_tube:Jekyll多媒体工具包:framed_picture::videocassette::page_with_curl:
这段代码是使用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`矩阵。
阅读全文