Unity3D WebCamTexture 取帧渲染、像素读取的终端适配

导语

Unity3D可以通过WebCamTexture获取摄像头的像素数据,用于渲染到纹理或者图像相关计算。 由于Win/Mac/Adnroid/iOS等各系统平台和硬件环境下,WebCamTexture 用于渲染和图像计算时表现不完全一致,很容易造成图像渲染或者计算不正确,给调试带来很大麻烦,所以在这里总结一下。

Unity3D可以通过WebCamTexture获取摄像头的像素数据,用于渲染到纹理或者图像相关计算。

由于Win/Mac/Adnroid/iOS等各系统平台和硬件环境下,WebCamTexture 用于渲染和图像计算时表现不完全一致,很容易造成图像渲染或者计算不正确,给调试带来很大麻烦,所以在这里总结一下。

纹理渲染和OpenCV图像计算的像素坐标系

用一张3*3像素的图片来表示,Unity3D纹理渲染像素顺序如下:

7

8

9

4

5

6

1

2

3

左下角为原点,向上和向右为正方向排布像素点

OpenCV进行图像计算的时候,像素顺序如下:

1

2

3

4

5

6

7

8

9

左上角为原点,向下和向右为正方向

WebCamTexture 在各平台下的表现

Windows

渲染时像素顺序:

7

8

9

4

5

6

1

2

3

获取的像素点数组排布顺序:

7

8

9

4

5

6

1

2

3

OpenCV读入像素计算时,将图像在y方向上翻转就可以了

Android 后置摄像头

同Windows

Android 前置摄像头

同Windows

但是此处有一点要注意的是,前置摄像头需要的实际上是左右调换的镜面成像,所以实际上需要的像素点排布顺序是:

9

8

7

6

5

4

3

2

1

在纹理渲染和图像计算时,最好是同时做一个x方向上的翻转,以得到上边的像素点顺序

iOS后置摄像头

iOS后置摄像头获取的像素顺序与OpenCV计算时的顺序一致,若直接渲染会上下颠倒。

其像素点排布顺序是:

1

2

3

4

5

6

7

8

9

所以在使用iOS后置摄像头获取帧并渲染时,应注意在y方向上对图像做翻转

iOS前置摄像头

iOS前置摄像头获取的像素点排布顺序是:

9

8

7

6

5

4

3

2

1

渲染时可不对图像做任何处理,这就是前置摄像头需要的左右镜面效果

OpenCV读取时,按照与Windwos一致的读取方式,将图像读取为

3

2

1

6

5

4

9

8

7

即可

rbga读取顺序

从WebCamTexture 中获取的像素点用Color32数组来表示

    // 摘要: 
    //     Representation of RGBA colors in 32 bit format.
    [IL2CPPStructAlignment(Align = 4)]
    [UsedByNativeCode]
    public struct Color32
    {
        // 摘要: 
        //     Alpha component of the color.
        public byte a;
        //
        // 摘要: 
        //     Blue component of the color.
        public byte b;
        //
        // 摘要: 
        //     Green component of the color.
        public byte g;
        //
        // 摘要: 
        //     Red component of the color.
        public byte r;

        //
        // 摘要: 
        //     Constructs a new Color32 with given r, g, b, a components.
        //
        // 参数: 
        //   r:
        //
        //   g:
        //
        //   b:
        //
        //   a:
        public Color32(byte r, byte g, byte b, byte a);
    }

OpenCV读取该数组内存地址的像素点数据,在所有平台下,读取的顺序都是 r-g-b-a

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏练小习的专栏

用TAOBAO的方法隐藏多余的线条

偶然的看到了TAOBAO UED团队的BLOG,在上面看到了篇文章,说的是怎么隐藏导航最后一项的竖线 1、类目之间的横竖线 ? 从很久很久以前开始,类目间的竖线...

18210
来自专栏逍遥剑客的游戏开发

挑战蓝龙Kalecgos

932
来自专栏生信技能树

TCGA体细胞突变系列教程--胃癌

有这个想法很久了,我教了很多人如何批量下载TCGA数据,以及分析各个癌症的somatic突变信息以及TMB,还有突变的特征频谱。

922
来自专栏Code_iOS

OpenGL ES 2.0 Using Modern Mobile Graphics Hardware

四. 问题:CPU 和 GPU 的 Memory 是有数据交换的,这种交换不会出问题吗?CPU 和 GPU 的计算速度一样吗?

672
来自专栏章鱼的慢慢技术路

图像处理基础知识

1675
来自专栏磐创AI技术团队的专栏

Tensorboard详解(下篇)

1574
来自专栏ATYUN订阅号

构建自定义人脸识别数据集的三种训练方法

在接下来的几篇文章中,我们将训练计算机视觉+深度学习模型来进行面部识别。在此之前,我们首先需要收集脸部数据集。

1403
来自专栏MelonTeam专栏

纹理压缩

导语 我们经常听说有相应的jpg,webpp,png等图像压缩格式,但你有没有听说过ETC,S3TC等格式吗?如果没听说就请看我这篇文章吧。 一、...

19810
来自专栏每日一篇技术文章

VR+全景播放器+头控讲解-02

DFA47D5C-AE21-4A3A-8E53-858CBA60B647.png

551
来自专栏PPV课数据科学社区

ECharts又搞大动作!3.5 版本提供更多数据可视化图表

在 echarts 新发布的 3.5 版本中,新增了日历坐标系,增强了坐标轴指示器。同时,echarts 统计扩展 1.0 版本发布了。日历坐标系用于在日历中绘...

3216

扫码关注云+社区