png四通道透明背景图成功加入到视频帧中 使用了mask原理
import cv2
import ffmpeg
import cv2
import numpy as np
import globvideo_f = 'D:/CCTV/CCTV.mp4' # 视频文件名
output_f = 'D:/CCTV/logoafter.mp4' # 输出视频文件名
video = cv2.VideoCapture(video_f)
# 获取视频宽度
frame_width = int(video.get(cv2.CAP_PROP_FRAME_WIDTH))#480
# 获取视频高度
frame_height = int(video.get(cv2.CAP_PROP_FRAME_HEIGHT))#852
start_x, start_y, w, h = 740, 420, 100, 28 # logo位置
logo_f = 'shrink.png'#读取png四通道的方式,一般imread读取不到真实图像的时候,要想到用imdecode的方式
logo = cv2.imdecode(np.fromfile(logo_f, dtype=np.uint8), cv2.IMREAD_UNCHANGED)
alpha = logo[..., 3] #取出索引号为3的通道
alpha[alpha>0]=1 #透明度不为0的地方,置为1
alpha=np.expand_dims(alpha, axis=[-1]) #广播机制,扩充维度
#print(alpha.shape)logo = cv2.imread(logo_f)
logo = cv2.resize(logo, (w, h))
#print(logo.shape)ret, frame = video.read()
img_h, img_w = frame.shape[:2]
output_video = cv2.VideoWriter(output_f, cv2.VideoWriter_fourcc(*'MP4V'), 30, (img_w, img_h))idx = 0
#获取fps
fps = video.get(cv2.CAP_PROP_FPS)while True:ret, frame = video.read()#print(type(frame))#print(frame.shape)idx += 1if frame is None:breakif idx > 0 and idx < 20*fps:frame_mask = np.ones_like(frame) #返回一个用1填充的形状和类型一样的数组,全黑。构造了一个与视频帧形状大小一样的全一的三维数组frame_mask[start_y:start_y + h, start_x:start_x + w, :] = 1-alpha #将放置logo区域全部弄成0frame *= frame_maskframe[start_y:start_y + h, start_x:start_x + w, :] += logo*alpha #空出来的黑色矩形区域,logo*alpha相当于logo*mask,alpha起到了当作过滤器的作用,当作mask使用output_video.write(frame)cv2.imshow('f', frame)cv2.waitKey(1)
1.读取四通道png (RBGA),A:代表的是透明度通道alpha,也就是一张含有透明度的png图有四个通道,但是依旧是一个三维结构numpy数据存储在计算机内,就是类似于一本书,有四张纸,一张纸代表一个二维矩阵,四张代表有四个通道。
读取的方式要区别于平时读取三通道的图,要使用解码方式
cv2.imdecode(np.fromfile(logo_f, dtype=np.uint8), cv2.IMREAD_UNCHANGED)
2.应用到mask原理,将整个需要的地方置为1,不需要的地方置为0,矩阵点成之后就会保留想要的部分,截掉不想要的部分
alpha = logo[..., 3] #取出索引号为3的通道
alpha[alpha>0]=1 #透明度不为0的地方,置为1
frame_mask = np.ones_like(frame) #返回一个用1填充的形状和类型一样的数组,全黑。构造了一个与视频帧形状大小一样的全一的三维数组
frame_mask[start_y:start_y + h, start_x:start_x + w, :] = 1-alpha #将放置logo区域全部弄成0
frame *= frame_mask
frame[start_y:start_y + h, start_x:start_x + w, :] += logo*alpha #空出来的黑色矩形区域,logo*alpha相当于logo*mask,alpha起到了当作过滤器的作用,当作mask使用
png四通道透明背景图成功加入到视频帧中 使用了mask原理相关推荐
- vue 背景透明度_Visual Studio 2017 设置透明背景图
一.前言 给大家分享一下,如何为VS2017设置透明背景图.下面是一张设置前和设置后的图片. 设置前: 设置后: 二.设置背景图片的扩展程序 我们打开VS的扩展安装界面:[工具]->[扩展和更新 ...
- vscode主题背景插件_vscode 全透明背景图
一.前言 08.02更新:已魔改插件 可以直接下载插件使用了 10.18跟新:已发布到vscode扩展,直接搜索"background-cover"进行安装使用 下载地址 下载后 ...
- python抠透明图_python利用蒙版抠图(使用PIL.Image和cv2)输出透明背景图
因为最近在做深度学习抠图,正好要用到蒙版进行抠图,所以我将抠图代码进行了封装注释,可以直接使用.可能走了弯路,若有高见请一定提出! 主要代码 import cv2 from PIL import Im ...
- Visual Studio 2019 设置透明背景图(傻瓜式教学)
Visual Studio 2019 设置透明背景图 一.前言 二.设置背景图片的扩展程序 三.编辑主题 一.前言 给大家分享一下,如何为VS2019设置透明背景图.下面是一张设置后的图片. 二.设置 ...
- notepad设置背景颜色_Word2017中如何设置透明背景图和取消背景图
如何在Word2017中设置透明背景图 1.打开Word文档 2.选择"插入"-"形状",选择并绘制你所需要的背景图形状 3.选中所绘的形状,点击右键,选择&q ...
- gif透明背景动画_PS实用技巧——视频转GIF
GIF原意为原义是"图像互换格式",它分为静态GIF和动画GIF两种,在文件上的扩展名为.gif,是一种压缩的位图格式,支持透明背景,适用于多种操作系统.它具有内存小,效果强的特点 ...
- 同时为多个竖屏视频加背景图变成横屏的视频
视频剪辑高手可以同时为多个尺寸相同的竖屏视频添加背景图,使之变成横屏播放的视频吗?小编的回答当然是可以的,下面一起来试试. 所需工具 视频剪辑高手 多段竖屏视频素材 一张横版图片 实例步骤 将需要剪辑 ...
- opencv 三通道图像转四通道透明图像
添加透明通道. 使用split(),merge(),合成图像通道. 把3通道的rgb转为4通道,设置alpha=0.并保存图像. #include <opencv2/opencv.hpp> ...
- 【模仿案例】input插入透明背景图并设置背景色
一.实现效果 二.分析需求: 1.圆角矩形文本框 2.左侧有一个搜索的小logo 3.内置有emoji和文字 三.实现思路 1.采用子绝父相定位 如果想将元素定位在一个具体的范围之内,又想让这个元素的 ...
最新文章
- 多尺度人脸检测--Face Detection through Scale-Friendly Deep Convolutional Networks
- 如何修改Chrome默认字体
- 提升Azure App Service的几个建议
- 计算机科学与应用考研题,2015年中科院计算机科学综合考研真题
- 在Tomcat 与weblogic 中的 日志(log4j) 配置系列一
- 决策树剪枝算法(二)
- bootstrap 图标 由Glyphicons提供
- 解决sublime text 3使用Install Package时出现There are no packages available for installation问题
- 数组与数组冒泡排序,选择排序
- informix 访问mysql_Informix 11.7 使用非系统用户访问数据库
- 2k显示无法连接服务器,NBA2K18无法连接服务器怎么办 无法连接服务区解决方法一览...
- java.lang.NoClassDefFoundError:org.ksoap2.seri...
- illustrator插件-拼版功能开发-裁切标记-js脚本开发-ai插件
- php vox转码,Audio Track Convert Tool(音轨转码工具)
- OOP Class具体解释
- 新人小白的第一次天池比赛感受
- 服务器系统防火墙设置在哪里设置方法,服务器怎么设置防火墙设置在哪里
- Windows的NSIS ERROR
- Pillow库学习笔记之Image.convert去底色详解
- 颜色 /About Color --图形学的B面(二)