视频图像畸变矫正

更新时间: 2024/03/15 17:20:45

在线美术或音乐教学场景中,用户会使用摄像头拍摄画板上的内容或录制师生的弹琴动作,但由于拍摄角度、镜头光学特性等原因,摄像头拍摄的画面相比原画可能有变形。NERTC SDK 支持通过提供畸变控制算法还原真实画面和场景。

功能原理

当使用相机去拍摄物体时,存在着一个从三维世界到二维图像的映射过程。在这个过程中,由于相机位置的变化和移动,会对拍摄物体的成像产生一定的形变影响。SDK 支持的图像畸变矫正指根据用户设置的合适参数,包括摄像头采集画面里待矫正区域的四个顶点相对于屏幕视图的坐标,通过算法将此形变进行复原。

矫正效果

畸变矫正效果图.png

前提条件

请联系网易云信技术支持,开通视频图像畸变矫正功能。

注意事项

  • 视频图像畸变矫正仅适用于 Android 和 iOS 。

  • 启用视频图像畸变矫正功能时,您需要将本地画布的渲染模式设置为 fit,保证视频帧等比例全部显示在当前视图中,否则可能会影响矫正功能的正常生效。

  • 若您使用了外部视频渲染功能,需要另外设置画布宽度、高度和镜像显示选项。

  • 矫正功能仅影响本端画面,生效后,本地用户画面和对端用户看到的本端画面,均会是矫正以后的画面。

  • 矫正参数可以多次设置。您也可以通过传入 nil 清空之前的矫正参数,将画面恢复到矫正之前的效果。

  • 如果您加入了多个房间,矫正功能开关和矫正参数只可在主房间中设置,在主房间和子房间同时生效;在您离开子房间后,矫正功能相关配置不会重置,但在您离开主房间或切换主房间后,矫正参数会恢复到默认值。

  • 矫正开关在 SDK 的生命周期内都生效,在对应的对象资源释放后重置。

配置步骤

  1. 调用 EnableVideoCorrection 方法开启视频图像畸变矫正。调用此方法时,您设置 enable 参数为 true 开启视频矫正功能。
  2. 调用 SetVideoCorrectionConfig 方法设置视频矫正参数。相关参数的含义如下表所示。
参数 参数说明

config

  • topLeft:矫正区域的左上顶点(x 和 y 的取值范围为 0 ~ 1 的浮点数)。该参数的默认值为 (0, 0)。
  • topRight:矫正区域的右上顶点(x 和 y 的取值范围为 0 ~ 1 的浮点数)。该参数的默认值为 (1, 0)。
  • bottomLeft:矫正区域的左下顶点(x 和 y 的取值范围为 0 ~ 1 的浮点数)。该参数的默认值为 (0, 1)。
  • bottomRight:矫正区域的右下顶点(x 和 y 的取值范围为 0 ~ 1 的浮点数)。该参数的默认值为 (1, 1)。
  • canvasWidth:画布宽度。该参数的单位为 px,默认值为 0,在使用外部视频渲染时需要传入此参数。
  • canvasHeight:画布高度。该参数的单位为 px,默认值为 0,在使用外部视频渲染时需要传入此参数。
  1. 调用 EnableVideoCorrection 方法关闭视频图像畸变矫正。调用此方法时,您需要设置 enable 参数为 false 关闭视频矫正功能。

示例代码

IRtcEngine rtcEngine = IRtcEngine.GetInstance();

    //视频图像畸变
    private void enableVideoCorrection()
    {
        /**
         * 开启视频图像矫正功能
         */
        rtcEngine.EnableVideoCorrection(true);
        /**
         * 关闭视频图像矫正功能
         */
        rtcEngine.EnableVideoCorrection(false);

        /**
         * 设置矫正参数
         */
        int width = 100;//画布宽
        int height = 100;//画布高
        var config = new RtcVideoCorrectionConfiguration()
        {
            topLeft = new RtcPoint { x = 0.2f,y = 0.2f},
            topRight = new RtcPoint { x = 0.8f, y = 0.2f },
            bottomRight = new RtcPoint{ x = 0.8f, y = 0.8f },
            bottomLeft = new RtcPoint{ x = 0.2f, y = 0.8f },
            canvasWidth = width, //画布宽
            canvasHeight =  height,
        };
        rtcEngine.SetVideoCorrectionConfig(config);

        /**
         * 清空矫正参数
         */
        rtcEngine.SetVideoCorrectionConfig(null);
    }

API 参考

方法 功能描述
EnableVideoCorrection 开启或关闭视频图像畸变矫正
SetVideoCorrectionConfig 设置视频图像矫正参数
此文档是否对你有帮助?
有帮助
去反馈
  • 功能原理
  • 矫正效果
  • 前提条件
  • 注意事项
  • 配置步骤
  • 示例代码
  • API 参考