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↩︎