canvas像素点操作之视频绿幕抠图


本文摘自PHP中文网,作者青灯夜游,侵删。

这篇文章主要介绍了canvas像素点操作之视频绿幕抠图的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

本文介绍了canvas像素点操作之视频绿幕抠图,分享给大家,具体如下:

用法:

1

context.putImageData(imgData, x, y, dX, dY, dWidth, dHeight);

1.jpg

下面的栗子简单实现了几个简单的滤镜效果,具体算法参考的这里,学过《数字图像处理》的同学应该对此理解更深刻。

demo

该栗子纯属为了演示功能而做,如果只强调效果而不在乎数据的话,用CSS3的filter属性便能高效又轻松地搞定。

部分代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

import imgUrl from './component/sample.jpg';

 

export default {

    data () {

        return {

            imgUrl: imgUrl

        }

    },

 

    methods: {

        onOperate1 () {

            this.ctx.putImageData(this.onCompute1(), 0, 0);

        },

 

        onOperate2 () {

            this.ctx.putImageData(this.onCompute2(), 0, 0);

        },

 

        ...

 

        onCancel () {

            this.reload();

        },

 

        onCompute1 () {

            let data = this.frameData.data;

 

            for (let i = 0; i < this.imgDataLength; i += 4) {

                let r = data[i + 0],

                    g = data[i + 1],

                    b = data[i + 2];

                 

                data[i + 0] = 255 - r;

                data[i + 1] = 255 - g;

                data[i + 2] = 255 - b;

            }

 

            return this.frameData;

        },

 

        onCompute2 () {

            let data = this.frameData.data;

 

            for (let i = 0; i < this.imgDataLength; i += 4) {

                data[i] = Math.abs(data[i + 1] - data[i + 2] + data[i + 1] + data[i]) * data[i] / 256; 

                data[i + 1] = Math.abs(data[i + 2] - data[i + 1] + data[i + 2] + data[i]) * data[i] / 256; 

                data[i + 2] = Math.abs(data[i + 2] - data[i + 1] + data[i + 2] + data[i]) * data[i + 1] / 256;

            }

 

            return this.frameData;

        },

 

        ...

    },

 

    mounted () {

        this.canvas = this.$refs['canvas'];

        this.ctx = this.canvas.getContext('2d');

 

        this.reload();

    }

}

上周跟同学去了一趟溧阳天目湖的南山竹海,在景区被忽悠拍了一张照片,就是这张 ――

然后被朋友圈吐槽抠图。其实当时就是站在一块绿幕前拍的:joy: 。

阅读剩余部分

相关阅读 >>

html5 canvas用来绘制弧形的代码实现

关于canvas与image的互相转换

html5中canvas与svg有什么区别

html5 canvas实现画直线与设置线条的样式

html5 canvas常用属性方法(介绍)

如何利用canvas实现按住鼠标移动绘制出轨迹

html5使用canvas实现跟随光标跳动的火焰效果

html5中canvas的问题总结

h5 canvas api中drawimage(图像进行缩放或裁剪)的使用实例

如何使用html5 canvas实现图像的马赛克

更多相关阅读请进入《canvas》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...