视频透明度抠图,视频需要一个灰度通道副本表示透明度

目前抖音等直播平台的礼物特效就是这个方法处理的

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>视频灰度通道抠图,视频包含灰度值表示透明的副本</title>
<style>
html, body {
::-webkit-scrollbar {
display: none;
};
background:rgba(0,0,0, 0); } div {
padding:0px;
margin: 0px;
} #c1 {
opacity: 0.001;
position:absolute;
left:0;
top:0;
z-index:0;
}
#c2 {
opacity: 1;
position:absolute;
left:0;
top:0;
z-index:3; } </style>
</head> <body style="background:url(bg.jpg)"> <div style="position:absolute;top:80px;left:0px;z-index:0;opacity:0.001">
<video width="555" height="777"
id="video"
src="media/789.dll"
controls="true"
crossorigin="anonymous" autoplay muted/>
</div> <canvas id="c1" width="1440" height="1280"></canvas>
<canvas id="c2" width="720" height="1280"></canvas> <input type='button' value="---change role---" style=" height:58px;position:absolute;top:122px;left:0px;z-index:99;"
onclick='setRole(805)'></input> <script> const tolerance = 5;
var roleId=1; function setRole(id){
var video = document.getElementById("video");
video.src='media/'+id+'.dll?'+new Date().getTime();
processor.c2.style.opacity=1;
// video.play();
//idle(); } function hideLayer()
{ processor.c2.style.opacity=0; } let processor = {
timerCallback: function() {
if (this.video.paused || this.video.ended) {
console.log("video.ended");
this.c2.style.opacity=0;
return;
}
this.computeFrame();
let self = this;
setTimeout(function () {
self.timerCallback();
}, 0);
}, doLoad: function() {
this.video = document.getElementById("video");
this.c1 = document.getElementById("c1");
this.ctx1 = this.c1.getContext("2d", { willReadFrequently: true });
this.c2 = document.getElementById("c2");
this.ctx2 = this.c2.getContext("2d", { willReadFrequently: true });
let self = this;
this.video.addEventListener("play", function() {
self.width = self.video.videoWidth ;
self.height = self.video.videoHeight;
self.c2.style.width= self.width / 2;
self.c1.style.width= self.width;
console.log("w=" + self.video.videoWidth); self.timerCallback();
}, false);
}, computeFrame: function() {
if(this.width<=0){
console.log("width:"+this.width);
return;
}
this.ctx1.drawImage(this.video, 0, 0, this.width, this.height);
let frameOpcity= this.ctx1.getImageData(this.width / 2, 0, this.width / 2, this.height);
let frame = this.ctx1.getImageData(0, 0, this.width / 2, this.height); let l = frame.data.length / 4; for (let i = 0; i < l; i++) {
let r = frame.data[i * 4 + 0];
let g = frame.data[i * 4 + 1];
let b = frame.data[i * 4 + 2];
let a= (r+ g+ b) / 3;
frameOpcity.data[i * 4 + 3] = a; } this.ctx2.putImageData(frameOpcity, 0, 0);
return; }
} document.addEventListener("DOMContentLoaded", () => {
processor.doLoad();
}); </script> </body>
</html>

  

h5 canvas 视频透明度抠图,视频需要一个灰度通道副本表示透明度的更多相关文章

  1. H5 的直播协议和视频监控方案

    H5 的直播协议和视频监控方案 一.流媒体主要实现方式 二.流媒体技术 2.1 流媒体 2.2 直播 2.3 流协议 2.3.1 HLS 协议 2.3.2 RTMP 协议 2.3.3 RTSP 协议 ...

  2. canvas与html5实现视频截图功能

    这段时间一直在研究canvas,突发奇想想做一个可以截屏视频的功能,然后把图片拉去做表情包,哈哈哈哈哈哈~~ 制作方法: 1.在页面中加载视频 在使用canvas制作这个截图功能时,首先必须保证页面上 ...

  3. paper 116:自然图像抠图/视频抠像技术梳理(image matting, video matting)

    1. Bayesian Matting, Chuang, CVPR 2001.http://grail.cs.washington.edu/projects/digital-matting/paper ...

  4. EasyNVR网页H5无插件播放摄像机视频功能二次开发之直播通道接口保活示例代码

    背景需求 随着雪亮工程.明厨亮灶.手机看店.智慧幼儿园监控等行业开始将传统的安防摄像头进行互联网.微信直播,我们知道摄像头直播的春天了.将安防摄像头或NVR上的视频流转成互联网直播常用的RTMP.HT ...

  5. PyQt+moviepy音视频剪辑实战2:一个剪裁视频文件精华内容留存工具的实现

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 PyQt+moviepy音视频剪辑实战 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一.引言 ...

  6. 用H5 Canvas绘制一个仪表盘笔记

    前端有许多做数据可视化的图表插件,但有时候UI设计的图可能用现成的js插件无法定制或者比较麻烦(还不如自己造轮子来的快). 下面记录下用H5 canvas设计一个仪表盘代码: <!DOCTYPE ...

  7. moviepy音视频剪辑:视频基类VideoClip子类VideoFileClip、CompositeVideoClip、ImageSequenceClip介绍

    ☞ ░ 前往老猿Python博文目录 ░ 一.引言 在<moviepy音视频剪辑:moviepy中的剪辑相关类及关系>介绍了VideoClip主要有六个直接子类(VideoFileClip ...

  8. moviepy音视频剪辑:视频基类VideoClip子类DataVideoClip、UpdatedVideoClip、ImageClip、ColorClip、TextClip类详解

    ☞ ░ 前往老猿Python博文目录 ░ 一.概述 在<moviepy音视频剪辑:moviepy中的剪辑相关类及关系>介绍了剪辑相关类及关系,其中VideoClip有多个直接子类和间接子类 ...

  9. moviepy音视频剪辑:视频剪辑基类VideoClip的属性及方法详解

    ☞ ░ 前往老猿Python博文目录 ░ 一.概述 在<moviepy音视频剪辑:moviepy中的剪辑基类Clip详解>和<moviepy音视频剪辑:moviepy中的剪辑基类Cl ...

  10. C#控制台程序取得INSOYA视频区的视频的真实URL,视频标题,发布时间集合。

    准备工作 起因是因为这个网站:http://i.youku.com/kmsfan 这个是一个叫做冒险岛的游戏的资讯论坛,以前我经常在里面传视频,现在我不玩这个游戏了,但是很多玩家还是经常到我的网站里面 ...

随机推荐

  1. 2.17 新手必看的Linux服务器管理和维护注意事项

    本节介绍有关服务器管理和维护过程中的一些注意事项,都是笔者的经验之谈,相信对新手会有一定的启发和帮助. 很多初学者接触Linux 时间不长,还未完整地学习一遍 Linux,理解本节内容可能有些困难,可 ...

  2. 13-1 c++拷贝控制:拷贝赋值与销毁

    定义一个类时,我们必须对它进行拷贝控制,即控制该类在进行拷贝.赋值.移动和销毁时要进行哪些操作 一个类通过五个特殊的成员函数进行拷贝控制 拷贝构造函数 拷贝赋值函数 移动构造函数 移动赋值函数 析构函 ...

  3. 国密SSL证书,为政务数据安全保驾护航

    随着数字化转型的加速,政务信息化建设已成为提升政府服务效率和质量的关键.近期,国家相关部门发布了<互联网政务应用安全管理规定>,为政务应用的安全管理提供了明确的规范和要求.该规定自2024 ...

  4. HTTP服务七层架构技术探讨

    作者: phpkernel  发布时间: 2012-11-26 13:27  阅读: 3998 次  推荐: 8   原文链接   [收藏]   1. 为什么分层? 计算机领域的体系结构普遍采用了分层 ...

  5. highcharts中的折线图

    折现图表的样式如下所示: 整体的一个设置代码如下: that.options = { title: { text: null }, subtitle: { text: null }, yAxis: { ...

  6. 设计模式【3.3】-- CGLIB动态代理源码解读

    cglib 动态代理 cglib介绍 CGLIB 是一个开源项目,一个强大高性能高质量的代码生成库,可以在运行期拓展 Java 类,实现 Java 接口等等.底层是使用一个小而快的字节码处理框架 AS ...

  7. kube-apiserver 高可用,keepalived + haproxy

    为什么要做高可用 在生产环境中,kubernetes 集群中会多多个 master 节点,每个 master 节点上都会部署 kube-apiserver 服务,实现高可用.但是 client 访问 ...

  8. uView的DatetimePicker组件在confirm回调中取不到v-model的最新值

    前情 uni-app是我比较喜欢的跨平台框架,它能开发小程序/H5/APP(安卓/iOS),重要的是对前端开发友好,自带的IDE让开发体验非常棒,公司项目就是主推uni-app,在uniapp生态中u ...

  9. Docker启动Nacos2.4.3并且使用MySQL

    1.拉取容器 docker pull nacos/nacos-server:v2.4.3 2.创建宿主机挂载目录 mkdir -p /docker/nacos/logs/ mkdir -p /dock ...

  10. opencv imshow 大图片显示,拖动显示

    用imshow显示大图片,不能完整显示,不方便.结合网友的代码,修改成现在的代码,可以拖动图片,方便查看完整图片.而且方便调试,只需要用MatShow替换imshow. struct MousePar ...