不讲太多,直接上代码看效果。
这个操作还是挺耗时的,在我的mac设备上,一张1080P图像,大概需要80-100ms。
在英伟达平台不适合使用这段代码,需要使用硬件加速相关接口(我是用的nvidia vpi),基本上耗时在1ms左右
cv::Mat frame = cv::imread(inputFilePath); //读取畸变图片,我这里读取了1920*1080的一张畸变图像
cv::Mat after;
// 相机内参矩阵(根据自己的相机参数修改)
cv::Mat cameraMatrix = (cv::Mat_<double>(3, 3) << 509.1966849128, 0.0, 973.4005913479,
0.0, 509.2770181290, 550.7969329425,
0.0, 0.0, 1.0);
// 畸变系数 - 假设有4个: k1, k2, k3, k4,(根据自己的相机参数修改)
cv::Mat distCoeffs = (cv::Mat_<double>(4, 1) << 0.1326377502, -0.0324882859, -0.0028076620, 0.0011987249);
// 计算最优新相机内参矩阵
cv::Size imageSize(1920, 1080);
cv::Mat newCameraMatrix = getOptimalNewCameraMatrix(cameraMatrix, distCoeffs, imageSize, 1, imageSize, 0);
cv::fisheye::undistortImage(frame, after, cameraMatrix, distCoeffs,newCameraMatrix);
cv::imwrite(outputFilePath, after);