Unity中通过shader实现OpenCV的Remap功能
我们希望对输入图片根据Distort程序进行畸变处理:
1 | void Distort(const float &x_src, |
| 输入图像 | 处理后图像 |
|---|---|
![]() |
![]() |
可以根据Distort程序,生成OpenCV中cv::remap函数所需的map1,map2映射矩阵,然后再使用cv::remap对输入图片进行处理。我们希望在Unity中,实现类似于cv::remap函数的功能。
首先我们根据Distort()生成像素点的LUT映射矩阵,并且保存到screen_calibration_lut.bin文件中:
1 | void GenerateLut(const cv::Mat &control_points, |
在Unity端中,读取screen_calibration_lut.bin文件,并且通过Unity
Shader屏幕特效函数OnRenderImage()1,在图像渲染完成后对图像进行Remap处理:
1 | using System.Collections; |
其中,所使用的shader文件ScreenUndistortion.shader为:
1 | Shader "Hidden/ScreenUndistortion" |
https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnRenderImage.html↩︎

