png四通道透明背景图成功加入到视频帧中 使用了mask原理

2023-10-28

import cv2
import ffmpeg
import cv2
import numpy as np
import glob

video_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 += 1
    if frame is None:
        break
    if 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区域全部弄成0
        frame *= frame_mask
        frame[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使用

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

png四通道透明背景图成功加入到视频帧中 使用了mask原理 的相关文章

随机推荐

  • 【第一章】专栏介绍

    版本 修改时间 初稿 2023 03 26 补充 考研和就业的选择 2023 04 04 自我介绍 你好 我曾经是一名普通一本学生 专业是电子信息工程专业 从大二就开始独自一人自学后端开发 大三后面三年大部分时间都在图书馆或者实验室学习 在
  • 如何上传大文件(4GB)到虚拟机

    使用xhell上传大文件会报文件过大的异常 解决方案 可以使用 Everything 工具 实现快速便捷传送大文件到虚拟机 1 百度搜索Everything 进入官网下载 这个程序体量非常小 可以放心下载 2 下载完成后打开 点击工具一栏
  • linux下MySql服务器的安装(yum安装OK)

    root test219 mysql mysql V mysql Ver 14 14 Distrib 5 5 11 for Linux x86 64 using readline 5 1 mysql5 5在linux服务器上的安装 mysq
  • 2021.11.12总结

    把入门3循环结构的题大致写完了
  • 树莓派4B之Windows XP系统安装游戏(一)

    上一篇博文 树莓派4B安装windows xp windows 95 windows xp windows 95 for raspberry pi 4B 下一篇博文 树莓派4B之Windows XP系统安装游戏 二 目录 一 模拟器 游戏下
  • AI新手必看:如何区分参数和超参数

    相信所有人刚开始应用机器学习时 都会被两个术语混淆 计算机学科里有太多的术语 而且许多术语的使用并不一致 哪怕是相同的术语 不同学科的人理解一定有所不同 比如说 模型参数 model parameter 和 模型超参数 model Hype
  • 华为nova6se怎么升级鸿蒙,华为EMUI11支持哪些手机

    华为EMUI11适配机型有什么 首批支持EMUI11 更新的机型有 P40 系列 Mate30 系列 MatePad Pro系列等 10 款机型 先了解更多EMUI11适配机型相关内容的小伙伴下面和小编一起来看看吧 华为EMUI11适配机型
  • VC++ 图像颜色调节

    1 BMP图片在GDI方式下贴图 32位位图 半透明像素会显示黑色或白底 像素处理代码 void CrossImage CImage img if img IsNull return 确认该图像包含Alpha通道 if img GetBPP
  • JAVA的图形用户界面布局GUI入门(上)

    java的GUI企业里面用的比较少 现在主流的UI都使用HTML5 开发 Java提供了三个主要包 做GUI开发 java awt 包 主要提供字体 布局管理器 javax swing 包 商业开发常用 主要提供各种组件 窗口 按钮 文本框
  • 神经网络学习之一——M-P模型

    神经网络学习之一 M P模型 M P模型是什么 M P模型是于1943年美国神经生理学家沃伦 麦卡洛克 Warren McCuloch 和数学家沃尔特 皮茨 Walter Pitts 提出 是首个通过模仿神经元而形成的模型 结构图如下所示
  • 主机地址变更后,dubbo请求时依旧会寻址旧IP的问题

    机房迁移 导致测试服务器IP变更 比原于IP为192 168 1 105变更为10 1 9 120 服务源码未做任何变更 启动服务时依旧是旧地址请求 此问题由dubbo本地注册中心的缓存所致 清理掉即可 位置一般在于 用户目录 dubbo目
  • Redis(一)常见命令使用

    常见文件名 Redis cli使用命令 1 启动Redis 2 连接Redis 3 停止Redis 4 发送命令 1 redis cli带参数运行 如 2 redis cli不带参数运行 如 5 测试连通性 key操作命令 获取所有键 查询
  • PostgreSQL系列3:PostgreSQL导入导出SQL

    启动数据库 pg ctl D data db pgsql data l data db pgsql logs pgsql log start 关闭数据库 pg ctl D data db pgsql data stop 使用pgsql客户端
  • R语言实战学习--回归

    文章目录 普通最小二乘回归 OLS 简单线性回归 多项式回归 多元线性回归 回归诊断 标准方法 QQ图正态性检验 残差图 误差的独立性 成分残差图 偏残差图 线性 同方差性 线性模型假设综合验证 异常观测值 高杠杆值 强影响点 变量添加图
  • 爬虫基础————ip地址和url详解

    学习慕课网bobby老师的课程从零起步 系统入门Python爬虫工程师时做的笔记 有兴趣的同学可以去慕课网观看视频 1 ip地址 整个网络传输可以比作快递 数据就是快递包裹 会经过一系列中转站 分包捡包等操作 最后才送到客户手中 Ip地址就
  • Python程序:输出杨辉三角的几种办法

    文章目录 一 问题描述 二 问题分析 三 第一种方法 1 具体代码 2 运行结果 3 程序的改进 四 第二种方法 1 具体代码 2 运行结果 五 总结分析 一 问题描述 给定一个非负整数 n 生成 杨辉三角 的前 n行 在 杨辉三角 中 每
  • 【文献调研】多任务学习-Part1

    基于数据增强和多任务学习的突发公共卫生时间谣言识别研究 摘要 Motivation 通过引入多任务学习模型和数据增强方法 解决突发公共卫生事件情景下谣言识别任务数据不平衡且带标签数据量少的问题 Methods 首先提取突发公共卫生事件谣言文
  • 《Learning Spark》第八章:调优及调试spark应用

    2020 07 05 引言 我记得当时我就是因为使用hadoop太过费劲了 才上手的spark 然后因为自己的机器性能不行 又一点一点调优 当时调优的过程 主要是从底层的结构上来进行调优 主要就是那些worker数量以及内存大小等等 但是对
  • PyTorch和TensorFlow生成对抗网络学习MNIST数据集

    介绍 生成对抗网络 简称GAN 是最近开发的最受欢迎的机器学习算法之一 对于人工智能 AI 领域的新手 我们可以简单地将机器学习 ML 描述为AI的子领域 它使用数据来 教 机器 程序如何执行新任务 一个简单的例子就是使用一个人的脸部图像作
  • png四通道透明背景图成功加入到视频帧中 使用了mask原理

    import cv2 import ffmpeg import cv2 import numpy as np import glob video f D CCTV CCTV mp4 视频文件名 output f D CCTV logoaft