使用OpenCV做图像的鱼眼矫正

不讲太多,直接上代码看效果。

这个操作还是挺耗时的,在我的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);
OpenCVSharp是一个用于.NET平台的OpenCV库的封装,它提供了一套简单易用的API来处理计算机视觉任务,包括图像矫正,如鱼眼校正。在C#中,我们可以使用OpenCvSharp来纠正鱼眼效应,以下是基本步骤的一个示例: ```csharp using System; using cv2 = OpenCvSharp; class FishEyeCorrection { static void Main(string[] args) { // 加载鱼眼图像 Mat srcImage = cv2.ImRead("input_fisheye.jpg", ImreadModes.Color); if (srcImage.Empty()) { Console.WriteLine("Error loading image"); return; } // 创建一个CameraMatrix对象,用于存储相机内参矩阵 CameraMatrix cameraMatrix = new CameraMatrix(); // 使用Undistort函数进行矫正,这需要一个DistortionCoefficients对象 // 这里通常需要预先获取到一些系数,例如通过棋盘法或者专门的鱼眼校正算法 DistortionCoefficients distortionCoeffs = ...; // 实际上需要从文件或计算得到 Mat dstImage = new Mat(); cv2.Undistort(srcImage, dstImage, cameraMatrix, distortionCoeffs); // 保存矫正后的图像 cv2.ImWrite("output_rectified.jpg", dstImage); // 显示原始和矫正后的图片对比 Cv2.imshow("Original Image", srcImage); Cv2.imshow("Rectified Image", dstImage); Cv2.waitKey(0); // 等待用户按键 Cv2.destroyAllWindows(); } } ``` 注意,上述代码中省略了获取`DistortionCoefficients`的部分,这部分通常涉及到对鱼眼图像是如何畸变的模型的理解,可能需要使用特殊的算法(如Brown-Conrady模型、Eratosthenes模型等)去估计或手动测量。你需要确保有足够的输入数据来计算这些系数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值