实现对图片或者视频增加隐藏水印和提取水印
好久好久没有写博客了,最近看见一个很有意思的文章:小心你的电脑被窃听,就是说在一些公司,截图都会存在水印,方便溯源,然后出于技术的好奇,我在github上搜了一下,还真有相关的github项目:对图片进行水印增加和提取,下面是地址:blind_watermark
1.实现对图片的水印提取
pip install blind-watermark
# 嵌入水印: blind_watermark --embed --pwd 1234 examples/pic/ori_img.jpeg "watermark text" examples/output/embedded.png
# 提取水印: blind_watermark --extract --pwd 1234 --wm_shape 111 examples/output/embedded.png
很简单,就是按着命令后走就行,但是问题是:公司的图片里面隐藏的水印的加密方式,我们也不知道啊,我提取了一下我的截图,出现的就是乱码
2.实现对视频的水印添加和提取
这个没什么,就是在上面的基础上,对视频进行分帧,然后对每帧进行水印的添加,然后再加添加了水印的图片合成video,还有对每帧进行水印的提取。
import os
from blind_watermark import WaterMark
import cv2
def frames_to_video(frame_folder, output_video_path, frame_rate):frame_paths = sorted([os.path.join(frame_folder, f) for f in os.listdir(frame_folder)])first_frame = cv2.imread(frame_paths[0])height, width, _ = first_frame.shapefourcc = cv2.VideoWriter_fourcc(*'mp4v')video = cv2.VideoWriter(output_video_path, fourcc, frame_rate, (width, height))for frame_path in frame_paths:frame = cv2.imread(frame_path)video.write(frame)video.release()def embed_watermark_on_frames(input_folder, output_folder, password_img, password_wm, watermark):bwm = WaterMark(password_img=password_img, password_wm=password_wm)bwm.read_wm(watermark, mode='str')for frame_path in os.listdir(input_folder):frame_full_path = os.path.join(input_folder, frame_path)bwm.read_img(frame_full_path)output_frame_path = os.path.join(output_folder, frame_path)bwm.embed(output_frame_path)def video_to_frames(video_path, output_folder):cap = cv2.VideoCapture(video_path)frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))frame_rate = int(cap.get(cv2.CAP_PROP_FPS))frame_idx = 0while cap.isOpened():ret, frame = cap.read()if not ret:breakframe_path = f"{output_folder}/frame_{frame_idx:04d}.png"cv2.imwrite(frame_path, frame)frame_idx += 1cap.release()return frame_count, frame_rate
def extract_watermark_from_frames(frame_folder, password_img, password_wm, wm_shape):bwm = WaterMark(password_img=password_img, password_wm=password_wm)for frame_path in os.listdir(frame_folder):frame_full_path = os.path.join(frame_folder, frame_path)watermark = bwm.extract(frame_full_path, wm_shape=wm_shape, mode='str')print(f"Watermark from {frame_path}: {watermark}")# 分解视频
video_path = "test.mp4"
output_frames_folder = "frames"
os.makedirs(output_frames_folder, exist_ok=True)
frame_count, frame_rate = video_to_frames(video_path, output_frames_folder)# 嵌入水印
watermark = "secret"
password_img = 1
password_wm = 1
output_watermarked_frames = "watermarked_frames"
os.makedirs(output_watermarked_frames, exist_ok=True)
embed_watermark_on_frames(output_frames_folder, output_watermarked_frames, password_img, password_wm, watermark)# 合成为视频
output_video_path = "watermarked_video.mp4"
frames_to_video(output_watermarked_frames, output_video_path, frame_rate)# 提取水印
extract_watermark_from_frames(output_watermarked_frames, password_img, password_wm, wm_shape=len(watermark))
相关文章:
实现对图片或者视频增加隐藏水印和提取水印
好久好久没有写博客了,最近看见一个很有意思的文章:小心你的电脑被窃听,就是说在一些公司,截图都会存在水印,方便溯源,然后出于技术的好奇,我在github上搜了一下,还真有相关的github…...
uniapp配置全局消息提醒
1.H5使用根标签插入dom的方式实现。 2.app端使用plus.nativeObj.View的方式绘制实现 H5端app端 H5端 创建组件orderAlert.vue <template><div class"view"><div class"content" v-if"visible"><div class"message&q…...
卸载snap docker一直卡住:Save data of snap “docker“ in automatic snapshot set #3
在卸载 Snap 安装的 Docker 时卡住,通常是因为 Snap 在执行卸载时会先尝试保存一些快照(自动或手动创建的),并且该过程可能因某些原因而卡住。为了解决这个问题,你可以按照以下步骤强制删除 Snap 安装的 Docker&#x…...
python学习——字典元素的访问和遍历
在Python中,访问和遍历字典元素的方法如下: 文章目录 访问字典元素1. 使用键来访问值2. 使用 get() 方法 遍历字典元素1. 遍历字典的键2. 遍历字典的值3. 遍历字典的键和值4. 使用列表推导式来创建新的列表 实操 访问字典元素 1. 使用键来访问值 # 创…...
数据结构基础之《(9)—归并排序》
一、什么是归并排序 1、整体是递归,左边排好序右边排好序merge让整体有序 2、让其整体有序的过程里用了排外序方法 3、利用master公式来求解时间复杂度 4、当然可以用非递归实现 二、归并排序说明 1、首先有一个f函数 void f(arr, L, R) 说明:在arr上…...
【深度学习】各种卷积—卷积、反卷积、空洞卷积、可分离卷积、分组卷积
在全连接神经网络中,每个神经元都和上一层的所有神经元彼此连接,这会导致网络的参数量非常大,难以实现复杂数据的处理。为了改善这种情况,卷积神经网络应运而生。 一、卷积 在信号处理中,卷积被定义为一个函数经过翻转…...
远程视频验证如何改变商业安全
如今,商业企业面临着无数的安全挑战。尽管企业的形态和规模各不相同——从餐厅、店面和办公楼到工业地产和购物中心——但诸如入室盗窃、盗窃、破坏和人身攻击等威胁让安全主管时刻保持警惕。 虽然传统的监控摄像头网络帮助组织扩大了其态势感知能力,但…...
电脑启动需要经历哪些过程?
传统BIOS启动流程 1. BIOS BIOS 启动,BIOS程序是烧进主板自带的ROM里的,所以无硬盘也可以启动。BIOS先进行自检,检查内存、显卡、磁盘等关键设备是否存在功能异常,会有蜂鸣器汇报错误,无错误自检飞快结束。 硬件自检…...
纯Go语言开发人脸检测、瞳孔/眼睛定位与面部特征检测插件-助力GoFly快速开发框架
前言 开发纯go插件的原因是因为目前 Go 生态系统中几乎所有现有的人脸检测解决方案都是纯粹绑定到一些 C/C 库,如 OpenCV 或 dlib,但通过 cgo 调用 C 程序会引入巨大的延迟,并在性能方面产生显著的权衡。…...
postman使用正则表达式提取数据实战篇!
之前篇章中postman多接口关联使用的是通过JSON提取器的方式进行提取。 除了JSON提取器提取数据外还可通过另一种方式——正则表达式来提取数据。 1、使用正则表达式提取器实现接口关联,match匹配 正则匹配表达式将需要提取的字段key:value都放入表达式中ÿ…...
ipmitool使用详解(三)-解决各种dell、hp服务器无法ipmitool连接问题
报错 [root@localhost ~]# ipmitool -H 10.1.2.41 -I lan -U admin -P "password123" lan print 1 Get Session Challenge command failed Error: Unable to establish LAN session Error: Unable to establish IPMI v1.5 / RMCP session [root@localhost ~]# ipmit…...
AWS EC2设置用户名密码登录
使用AWS EC2 设置用户名密码登录 步骤 1: 访问控制台 登录到AWS管理控制台。导航至 EC2 Dashboard。在左侧导航栏中选择 Instances。选择需要配置的实例。使用 EC2 Instance Connect 访问实例控制台。 步骤 2: 切换到 root 用户 打开终端或命令行工具,通过SSH连…...
BurpSuite安装教程(详细!!附带下载链接)
声明 学习内容来自 B 站UP主泷羽sec,如涉及侵权马上删除文章。 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负。 ✍🏻作者简介:致…...
MIPS寄存器文件设计实验
今天写MIPS寄存器文件设计实验,同时复习一下MIPS这块地方 实验要求: 一、寄存器的作用 想象一下,你正在厨房准备做一顿大餐。你需要用到各种食材和工具,比如刀、锅、砧板,还有食材本身,比如肉、菜、调料等…...
uniapp使用扩展组件uni-data-select出现的问题汇总
前言 不知道大家有没有学习过我的这门课程那,《uniCloud云开发Vue3版本官方推荐用法》,这么课程已经得到了官方推荐,想要快速上手unicloud的小伙伴们,可以学习一下这么课程哦,不要忘了给一键三连呀。 在录制这门课程…...
反向代理模块开发
1 概念 1.1 反向代理概念 反向代理是指以代理服务器来接收客户端的请求,然后将请求转发给内部网络上的服务器,将从服务器上得到的结果返回给客户端,此时代理服务器对外表现为一个反向代理服务器。 对于客户端来说,反向代理就相当于…...
海康面阵、线阵、读码器及3D相机接线说明
为帮助用户快速了解和配置海康系列设备的接线方式,本文将针对海康面阵相机、线阵相机、读码器和3D相机的主要接口及接线方法进行全面整理和说明。 一、海康面阵相机接线说明 海康面阵相机使用6-pin P7接口,其功能设计包括电源输入、光耦隔离信号输入输出…...
AI与ArcGIS Pro的地理空间分析和可视化
AI思维已经成为一种必备的能力,ArcGIS Pro3的卓越性能与ChatGPT的智能交互相结合,将会为您打造了一个全新的工作流程! 那么如何将火热的ChatGPT与ArcGIS Pro3相结合,使我们无需自己进行复杂的编程,通过强大的ChatGPT辅助我们完成地…...
详解HTML5语言
文章目录 前言任务一 认识HTML5任务描述:知识一 HTML5基础知识 任务二 HTML 5语义元素任务描述:知识一 HTML5新增结构元素知识二 HTML5文本语义元素 总结 前言 HTML5是一个新的网络标准,现在仍处于发展阶段。目标是取代现有的HTML 4.01和XHT…...
docker compose一键启动ES集群和kibana
集群启用了XPACK后,只有第一次可以启动成功。要是宕机了。就启动不了了。(除非删除data目录所有数据)生产环境 启用了后 建议配置 自定义证书。 services:es01:image: "docker.elastic.co/elasticsearch/elasticsearch:7.17.25"co…...
医学图像分类实战:基于kvasir v2胃病数据集的深度卷积网络性能对比
1. 医学图像分类与KVASIR V2数据集简介 胃镜图像分类是计算机辅助诊断系统中的关键环节。KVASIR V2作为目前最全面的公开胃病数据集,包含8类常见胃部病变的8000张高清图像,每类1000张。这些图像由专业胃肠病专家标注,覆盖了从正常黏膜到早期…...
DIY电源改造必备:TL594与SG3524 PWM控制器实战对比(附电路图)
DIY电源改造实战:TL594与SG3524 PWM控制器深度对比与电路设计指南 1. 从零认识PWM控制器的核心价值 在电子爱好者的工作台上,电源改造项目总是充满魅力与挑战。无论是将旧电脑电源改造成可调实验室电源,还是为自制音响系统设计高效供电模块&a…...
人工智能毕业设计2026方向集合
0 选题推荐 - 人工智能篇 毕业设计是大家学习生涯的最重要的里程碑,它不仅是对四年所学知识的综合运用,更是展示个人技术能力和创新思维的重要过程。选择一个合适的毕业设计题目至关重要,它应该既能体现你的专业能力,又能满足实际…...
如何快速找到领域内的核心论文?3 条最有效路径
在做科研文献检索时,很多研究者都会遇到同一个问题: 文献很多,但不知道哪些最重要。例如,当你在数据库中输入一个研究关键词时,检索结果可能会出现几百篇甚至上千篇论文。面对如此庞大的文献数量,很多人会产…...
ms-swift微调框架入门:快速掌握LoRA微调与模型合并技巧
ms-swift微调框架入门:快速掌握LoRA微调与模型合并技巧 1. 引言 在当今大模型技术快速发展的背景下,如何高效地对大型语言模型进行微调成为了许多开发者和研究者的关注焦点。ms-swift作为一款强大的微调框架,提供了丰富的功能和技术支持&am…...
Onekey:突破Steam清单管理瓶颈的全场景开源解决方案
Onekey:突破Steam清单管理瓶颈的全场景开源解决方案 【免费下载链接】Onekey Onekey Steam Depot Manifest Downloader 项目地址: https://gitcode.com/gh_mirrors/one/Onekey 在数字游戏产业蓬勃发展的今天,Steam平台已成为全球最大的综合性数字…...
突破性SLAM实战:如何用SLAM Toolbox彻底改变机器人定位与建图工作流
突破性SLAM实战:如何用SLAM Toolbox彻底改变机器人定位与建图工作流 【免费下载链接】slam_toolbox Slam Toolbox for lifelong mapping and localization in potentially massive maps with ROS 项目地址: https://gitcode.com/gh_mirrors/sl/slam_toolbox …...
Potree点云格式技术选型与实战指南:从需求到落地的完整路径
Potree点云格式技术选型与实战指南:从需求到落地的完整路径 【免费下载链接】potree WebGL point cloud viewer for large datasets 项目地址: https://gitcode.com/gh_mirrors/po/potree 在三维数据可视化领域,点云格式的选择直接影响项目的加载…...
YOLOv8工业缺陷检测推理延迟骤降63%:基于TensorRT量化+ONNX Runtime定制化内核的完整链路
第一章:YOLOv8工业缺陷检测推理延迟骤降63%:基于TensorRT量化ONNX Runtime定制化内核的完整链路在高吞吐产线场景下,YOLOv8原生PyTorch模型在Jetson AGX Orin上单帧推理延迟达84.2ms(输入尺寸640640),严重制…...
用 OpenAI Codex 打造你的 AI 结对编程助手
用 OpenAI Codex 打造你的 AI 结对编程助手 告别重复劳动,让 AI 直接帮你写代码、修 Bug、跑测试 在 AI 编程工具层出不穷的今天,OpenAI Codex 依然是许多开发者心目中的“神器”。与普通的代码补全工具不同,Codex 是一款终端原生的 AI 编程助…...
