Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之十一 简单给视频添加水印图片效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之十一 简单给视频添加水印图片效果

目录

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之十一 简单给视频添加水印图片效果

一、简单介绍

二、简单给视频添加水印图片效果实现原理

三、简单给视频添加水印图片效果案例实现简单步骤

四、注意事项


一、简单介绍

Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。Python是一种解释型脚本语言,可以应用于以下领域: Web 和 Internet开发、科学计算和统计、人工智能、教育、桌面界面开发、软件开发、后端开发、网络爬虫。

这里使用 Python  基于 OpenCV 进行视觉图像处理,......

二、简单给视频添加水印图片效果实现原理

视频水印是指在视频内容中添加图像、文字或其他标识符的技术,以表明视频的所有权、来源、版权信息或其他相关信息。视频水印可以是透明的或半透明的,通常位于视频画面的角落或其他不影响主要内容的位置。视频水印可以用于保护视频内容的版权,防止未经授权的复制和使用,以及增加视频的专业性和可识别性。

实现原理:

  1. 打开输入视频文件,并获取其每一帧的大小。
  2. 打开水印图像文件,并获取其大小。
  3. 遍历视频的每一帧,将水印图像叠加到视频帧上。
  4. 根据指定的位置参数确定水印在视频帧上的位置,并将水印图像叠加到相应的位置上。
  5. 将带有水印的视频帧写入输出视频文件。

实现方法:

  1. 使用 OpenCV 的 VideoCapture 类打开输入视频文件,并读取每一帧。
  2. 使用 OpenCV 的 VideoWriter 类创建输出视频文件,并指定视频编码器、帧率和大小。
  3. 使用 OpenCV 的 imread 函数读取水印图像。
  4. 遍历视频的每一帧,在每一帧上叠加水印图像。
  5. 根据指定的位置参数确定水印的位置,并将水印图像叠加到视频帧的相应位置上。
  6. 使用 OpenCV 的 addWeighted 函数将水印图像叠加到视频帧上,实现透明度叠加效果。
  7. 将带有水印的视频帧写入输出视频文件。

涉及了一些关键函数:

  1. cv2.VideoCapture(): 用于打开视频文件并创建一个视频捕获对象。在这里,它被用于打开输入视频文件并创建一个用于读取帧的视频捕获对象。

  2. cap.isOpened(): 用于检查视频是否成功打开。在这里,它被用于检查输入视频文件是否成功打开。

  3. cap.read(): 用于读取视频的下一帧。在这里,它被用于循环遍历视频的每一帧并读取帧内容。

  4. cv2.VideoWriter(): 用于创建一个视频写入对象,可以将帧写入视频文件。在这里,它被用于创建一个用于写入帧的视频写入对象。

  5. cv2.imread(): 用于读取图像文件。在这里,它被用于读取水印图像文件。

  6. cv2.imwrite(): 用于将图像写入文件。虽然在这里没有直接使用,但可以用它来保存添加水印后的帧。

  7. cv2.putText(): 用于向图像中添加文字。在这里,虽然没有直接使用,但可以用它来添加文字水印。

  8. cv2.addWeighted(): 用于将两个图像进行加权叠加。在这里,它被用于将水印图像叠加到视频帧上。

  9. cap.release(): 用于释放视频捕获对象的资源。

  10. out.release(): 用于释放视频写入对象的资源。

  11. cv2.destroyAllWindows(): 用于关闭所有窗口,通常在程序结束时调用。

三、简单给视频添加水印图片效果案例实现简单步骤

1、编写代码

2、运行效果

3、具体代码

"""
简单给视频添加水印图片效果1、打开输入视频文件,并获取其每一帧的大小。2、打开水印图像文件,并获取其大小。3、遍历视频的每一帧,将水印图像叠加到视频帧上。4、根据指定的位置参数确定水印在视频帧上的位置,并将水印图像叠加到相应的位置上。5、将带有水印的视频帧写入输出视频文件。
"""import cv2
import osdef add_watermark_to_video(input_video_path, output_video_path, watermark_image_path, alpha=1.0,position='bottom-right'):"""简单给视频添加水印图片效果:param input_video_path: 原视频路径:param output_video_path: 添加水印后保存视频路径:param watermark_image_path: 水印图片路径:param alpha: 控制水印整体透明度的参数,范围为 0 到 1:param position: 控制水印位置的参数,可选值包括 'top-left', 'top-right', 'bottom-left', 'center', 'bottom-right':return:"""# 检查输入视频文件是否存在if not os.path.isfile(input_video_path):print("Error: Input video file does not exist.")return# 检查水印图像文件是否存在if not os.path.isfile(watermark_image_path):print("Error: Watermark image file does not exist.")return# 打开视频文件cap = cv2.VideoCapture(input_video_path)# 检查视频是否成功打开if not cap.isOpened():print("Error: Failed to open input video.")return# 获取视频的宽度和高度width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))# 创建VideoWriter对象用于写入输出视频fourcc = cv2.VideoWriter_fourcc(*'mp4v')out = cv2.VideoWriter(output_video_path, fourcc, 30.0, (width, height))# 读取水印图像watermark = cv2.imread(watermark_image_path, cv2.IMREAD_UNCHANGED)# 检查水印图像是否成功读取if watermark is None:print("Error: Failed to read watermark image.")return# 检查水印图像的透明度通道是否存在if watermark.shape[2] < 4:print("Error: Watermark image does not have an alpha channel.")return# 循环遍历视频的每一帧while True:ret, frame = cap.read()if not ret:break# 将水印叠加到当前帧上overlay = frame.copy()h, w = watermark.shape[:2]# 根据位置参数确定水印的位置if position == 'top-left':x_offset, y_offset = 10, 10elif position == 'top-right':x_offset, y_offset = width - w - 10, 10elif position == 'bottom-left':x_offset, y_offset = 10, height - h - 10elif position == 'center':x_offset, y_offset = (width - w) // 2, (height - h) // 2else:  # 默认为 'bottom-right'x_offset, y_offset = width - w - 10, height - h - 10for c in range(0, 3):overlay[y_offset:y_offset + h, x_offset:x_offset + w, c] = \watermark[:, :, c] * (watermark[:, :, 3] / 255.0 * alpha) + frame[y_offset:y_offset + h,x_offset:x_offset + w, c] * (1.0 - watermark[:, :, 3] / 255.0 * alpha)# 将帧写入输出视频out.write(overlay)# 释放资源cap.release()out.release()cv2.destroyAllWindows()def main():# 调用函数并指定输入和输出视频文件路径以及水印图像路径input_video_path = "Videos/CatRun.mp4"output_video_path = "Videos/CatRun_Wartermark.mp4"watermark_image_path = "Images/Watermark.png"alpha = 0.5  # 控制水印整体透明度的参数,范围为 0 到 1position = 'top-right'  # 控制水印位置的参数,可选值包括 'top-left', 'top-right', 'bottom-left', 'center', 'bottom-right'# 执行函数add_watermark_to_video(input_video_path, output_video_path, watermark_image_path, alpha, position)if __name__ == "__main__":main()

四、注意事项

  1. 参数安全性:对于输入的参数,需要进行安全校验,以确保输入的参数值在有效范围内,避免出现错误。
  2. 图像大小匹配:确保水印图像的大小与视频帧的大小匹配,否则可能导致叠加时的错误。
  3. 透明度处理:根据水印图像的透明度信息,合理处理水印图像与视频帧的叠加透明度,以保持水印的透明效果。
  4. 位置处理:根据指定的位置参数,确保水印图像叠加到视频帧的正确位置上,避免覆盖重要信息或者显示不完整。
  5. 资源释放:在处理完所有帧之后,及时释放视频读取和写入的资源,以避免内存泄漏或资源浪费。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/620658.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

跨境业务为什么要做Yandex推广?

随着全球化进程的不断加速&#xff0c;越来越多的企业开始寻求跨境发展机遇&#xff0c;尤其是在极具潜力的海外市场中寻找新的增长点。其中&#xff0c;俄罗斯及其周边地区因其庞大的市场规模和消费需求&#xff0c;成为众多企业瞄准的焦点。要在这一区域成功展开业务并触及目…

2024年Facebook广告新手教学与投放技巧大全

截止2024年1月&#xff0c;Facebook的每月活跃用户就超过了30亿&#xff0c;逐渐成为全球最受欢迎的社交媒体平台。许多广告主也纷纷用Facebook投放广告并获得了不错的效果&#xff0c;本篇文章将为广告新手提供全面的Facebook广告投放教程&#xff0c;从基础概念到Facebook广告…

prometheus metrics 添加元数据

1. 背景 当使用 Prometheus 监控多个 Kubernetes 集群时,如果没有合适的标签管理,alertmanager 在接收到警告时可能无法识别是哪个集群产生的警告。这可能会带来一些挑战: 警告上下文缺失: 当 alertmanager 接收到警告时,如果没有集群标识信息,很难确定警告来自哪个集群。这会…

文献速递:深度学习肝脏肿瘤诊断---基于深度学习的肝细胞结节性病变在整片组织病理图像上的分类

Title 题目 Deep Learning-Based Classification of Hepatocellular Nodular Lesions on Whole-Slide Histopathologic Images 基于深度学习的肝细胞结节性病变在整片组织病理图像上的分类 Background 背景 Hepatocellular nodular lesions (HNLs) constitute a heterogen…

Unity | Shader基础知识(第十二集:颜色混合)

目录 前言 一、日常生活中的常见现象 二、unity自带的一个结构体&#xff08;表面着色器SurfaceOutputStandard&#xff09; 三、自己写一个颜色混合的Shader 1.只加基础颜色Albedo 2.加入法线 3.加入光滑度 4.加入金属度 5.加入自发光 四、作者的话 前言 shader里每一…

Git-常规用法-含解决分支版本冲突解决方法

目录 前置条件 已经创建了Gitee账号 创建一个远程仓库 Git的优点 版本控制 Git 下载 Git的使用 检查Git的是否安装成功 git的常用命令 常用流程 Git 分支 分支流程 Git 远程仓库 远程仓库流程 特殊 可能遇到的问题 前置条件 已经创建了Gitee账号 创建一个远程仓…

Macs Fan Control Pro for Mac:全面优化Mac散热的得力助手

Macs Fan Control Pro for Mac是一款专为苹果电脑用户设计的风扇控制软件&#xff0c;旨在通过精确的风扇速度调节&#xff0c;全面优化Mac的散热性能&#xff0c;确保系统始终运行在最佳状态。 Macs Fan Control Pro for Mac v1.5.17中文版下载 该软件具备实时监控功能&#x…

中仕公考:教师招聘和事业单位联考的区别

教师招聘考试与事业单位联考作为两种不同的职业资格考试&#xff0c;其在报考条件和考试内容上存在明显的差异&#xff0c;具体内容为大家简要介绍一下&#xff1a; 一、报考条件 1. 教师招聘考试&#xff1a;此类考试的报名通常要求申请者持有相关教师资格证明。对于非师范生…

Maven配置的修改

在集团做java实习生的第一天&#xff0c;我的leader给了我项目的代码&#xff0c;并且还有一个settings.xml文件&#xff0c;当时很懵&#xff0c;不知道这个文件是干啥的&#xff0c;当然有的小伙伴可能一眼就认出来了&#xff0c;这个配置文件是做什么&#xff0c;是做maven配…

三个截然不同的爆仓案例,值得每个交易者反思

用铜做镜子&#xff0c;能端正衣冠&#xff1b;以史为镜可知兴&#xff1b;以人为镜能明得与失得。”做买卖&#xff0c;需要以他人的得失为鉴&#xff0c;这样才会不断地反思持续地提高持续地进步。在这篇文章中&#xff0c;我们会分享3个完全不同的爆仓案例给交易者一个“与明…

Maven超详细使用

定义 是一款用于管理和构建java项目的工具 作用 1. 依赖管理 2. 统一项目结构 3. 项目构建 项目目录结构 POM 项目对象模型 (Project Object Model) POM (Project Object Model) &#xff1a;指的是项目对象模型&#xff0c;用来描述当前的maven项目。 仓库 本地仓库&#…

LabVIEW光学探测器板级检测系统

LabVIEW光学探测器板级检测系统 特种车辆乘员舱的灭火抑爆系统广泛采用光学探测技术来探测火情。光学探测器作为系统的关键部件&#xff0c;其探测灵敏度、响应速度和准确性直接关系到整个系统的运行效率和安全性。然而&#xff0c;光学探测器在长期使用过程中可能会因为灰尘污…