当前位置: 首页 > news >正文

OpenCV实验:图片加水印

第二篇:图片添加水印(加 logo)


1. 实验原理

水印原理

  • 图片添加水印是图像叠加的一种应用,分为透明水印不透明水印
  • 水印的实现通常依赖于像素值操作,将水印图片融合到目标图片中,常用的方法包括:
    • 位运算:通过掩码(Mask)将目标区域清空,再将水印叠加到清空的区域。
    • Alpha 混合(Alpha Blending):通过加权计算将水印半透明地融合到目标图片。

步骤

  1. 将水印图片转为灰度图,并通过阈值处理生成二值化掩码。
  2. 利用掩码清空背景图像中水印位置的区域。
  3. 将水印图片嵌入到清空区域,完成水印添加。

2. 实验代码

以下为具体代码实现:

import cv2# 读取背景图像
img = cv2.imread("./background.jpeg")# 读取两个 logo 图像
logo = cv2.imread("./logo.png")# --------------------处理第一个 logo--------------------# 将 logo 转换为灰度图像,用于后续的二值化处理
logo_gray = cv2.cvtColor(logo, cv2.COLOR_BGR2GRAY)# 对灰度图像进行二值化处理,生成二值掩码
_, logo_binary = cv2.threshold(logo_gray,             # 输入的灰度图像0,                     # 阈值(自动确定)255,                   # 二值化后的最大值cv2.THRESH_BINARY_INV  # 反阈值化,将前景变为黑色,背景变为白色
)# 定义第一个 logo 的插入位置 (x1, y1)
x1, y1 = 10, 100# 从背景图中截取一个与 logo 大小相同的 ROI(Region of Interest)区域
ROI = img[y1:y1+logo.shape[0], x1:x1+logo.shape[1]]# 使用掩码进行位与运算,将 ROI 中对应 logo 的位置清空
ROI_logo = cv2.bitwise_and(ROI, ROI, mask=logo_binary)# 将清空的 ROI 区域与 logo 图像进行加法操作,完成 logo 的融合
img_logo = cv2.add(ROI_logo, logo)# 将融合后的 logo 替换回背景图的对应位置
img[y1:y1+logo.shape[0], x1:x1+logo.shape[1]] = img_logo# --------------------显示最终结果--------------------# 显示最终结果图像
cv2.imshow('image', img)# 等待用户按键退出窗口
cv2.waitKey(0)# 销毁所有窗口
cv2.destroyAllWindows()

3. 实验现象

实验结果

  1. 原始图片:背景图为一个没有水印的图片。
  2. 水印图像:Logo 被叠加到背景图的指定位置,与背景图的像素融合,看起来像是原始图像的一部分。

相关文章:

OpenCV实验:图片加水印

第二篇:图片添加水印(加 logo) 1. 实验原理 水印原理: 图片添加水印是图像叠加的一种应用,分为透明水印和不透明水印。水印的实现通常依赖于像素值操作,将水印图片融合到目标图片中,常用的方法…...

sql server log文件

确定 SQL Server 实例中具有大量 VDF 的数据库 SELECT [name], COUNT(l.database_id) AS vlf_count FROM sys.databases AS s CROSS APPLY sys.dm_db_log_info(s.database_id) AS l GROUP BY [name] HAVING COUNT(l.database_id) > 100; 在收缩日志文件之前确定事务日志中…...

Elasticsearch 集群部署

Elasticsearch 是一个分布式的搜索和分析引擎,广泛应用于日志分析、全文搜索、实时数据分析等场景。它以其高性能、高可用性和易用性而著称。本文档将引导您完成一个基本的 Elasticsearch 集群配置,包括节点间的通信、客户端访问、安全设置等关键步骤。我…...

微信小程序5-图片实现点击动作和动态加载同类数据

搜索 微信小程序 “动物觅踪” 观看效果 感谢阅读,初学小白,有错指正。 一、功能描述 a. 原本想通过按钮加载背景图片,来实现一个可以点击的搜索button,但是遇到两个难点,一是按钮大小调整不方便(网上搜索…...

策略梯度定理公式的详细推导

策略梯度定理公式的详细推导 以下是策略梯度定理公式从基础概率公式到最终形式的完整推导,帮助更清晰地理解推导过程中的每一个步骤。 1. 策略梯度的目标 我们希望最大化期望累积奖励 ( J ( θ ) J(\theta) J(θ) ),其定义为: J ( θ ) E…...

力扣-图论-10【算法学习day.60】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非…...

《Python WEB安全 库全解析》

《Python WEB安全 库全解析》 一、Python WEB安全 库概述二、常见的 Python WEB安全 库介绍1. Jiasule2. Awesome Python Security3. Flask-Security4. Flask-SeaSurf 三、Python WEB 安全库的优缺点1. 优点2. 缺点 四、Python WEB 安全库的使用场景1. 开发 Web 应用2. 处理敏感…...

Linux yum-config-manager命令异常

错误信息 使用 yum-config-manager命令时错误信息如下 sudo yum-config-manager \ > --add-repo \ > https://download.docker.com/linux/centos/docker-ce.repo sudo: yum-config-manager: command not found 解决办法 第一步: sudo yum -y install yum-u…...

ios 开发配置蓝牙

如果使用了蓝牙功能, 又没有配置, 会出现以下错误: This app has crashed because it attempted to access privacy-sensitive data without a usage description. The apps Info.plist must contain an NSBluetoothAlwaysUsageDescription key with a string value explaini…...

geoserver(1) 发布sql 图层 支持自定义参数

前提使用postgis 数据库支持关联 join 支持 in,not in,like,及其他sql原生函数 新增sql图层 编写自定义sql 编辑sql语句必须输出带有geom数据 正则表达式去除 设置id以及坐标参考系 预览sql图层效果 拼接sql参数 http://xxx.com/geoserver/weather/wms?SERVICEWMS&VERSI…...

Linux:network:添加ip的时候自动添加一个本地路由

文章目录 问题问题 最近在看一个路由的问题,顺便看内核代码,发现在添加IP的时候,内核会自动添加一个local route。 net/ipv4/devinet.c inet_rtm_newaddr->__inet_insert_ifa /* Send message first, then call notifier.Notifier will trigger FIB update, so thatlis…...

go 集成nacos注册中心、配置中心

使用限制 Go>v1.15 Nacos>2.x 安装 使用go get安装SDK: go get -u github.com/nacos-group/nacos-sdk-go/v2 快速使用 初始化客户端配置ClientConfig constant.ClientConfig{TimeoutMs uint64 // 请求Nacos服务端的超时时间,默…...

ssd202d-badblock-坏块检测

这边文章讲述的是坏快检测功能 思路: 1.第一次烧录固件会实现跳坏块,但是后续使用会导致坏块的产生; 于是我在uboot环境变量添加了两个变量来控制坏快 lb_badnum //坏块个数 lb_badoff //坏块所在位置 2.第一次开机会根据lb_badnum是否…...

MySQL-练习-数据介绍

文章目录 一. 数据介绍1. 数据结构2. 创建数据库,数据表3. 员工表(employees)练习1 4. 顾客表(customers)练习2 5. 商品(products)和商品类别(categories)表练习3 6. 供应商表(suppliers)练习4 7. 订单和订单明细表练习5 二. 数据汇总三. 使用CASE WHEN …...

React框架:解锁现代化Web开发的新维度

在当今前端开发领域,React 无疑是一颗璀璨的明星。React 是由 Facebook 开发的用于构建用户界面的 JavaScript 库,它在前端开发中占据着重要的地位,为开发者提供了一种高效、灵活且可维护的方式来构建复杂的用户界面。 一、React 的背景与开…...

电阻功率,限流,等效电阻

1 电阻额定功率 2 电阻限流作用 3 电阻并联等效电阻...

Qt | 开发工具(top1)

Qt Creator 跨平台、完整的集成开发环境(IDE),供应用程序开发者创建用于多个桌面、嵌入式和移动设备平台的应用程序。 Qt Linguist 一套将Qt C和Qt Quick应用程序翻译成本地语言的工具。 qmake Qt自动化构建工具,简化了不同平台的构建过程。…...

Node.js express

1. express 介绍 express 是一个基于 Node.js 平台的极简、灵活的 WEB 应用开发框架,官方网址:https://www.expressjs.com.cn/简单来说,express 是一个封装好的工具包,封装了很多功能,便于我们开发 WEB 应用&#xff…...

ios h5中在fixed元素中的input被focus时,键盘遮挡input (van-popup、van-feild)

问题描述: 前提:我使用的是vant组件库,其中一个页面中有一个van-popup组件,van-popup组件中又嵌套了一个van-field组件预期结果:当点击van-feild输入框时,键盘弹起,输入框显示在键盘上方实际结…...

springboot整合lua脚本在Redis实现商品库存扣减

1、目的 使用lua脚本,可以保证多条命令的操作原子性;同时可以减少操作IO(比如说判断redis对应数据是否小于0,小于0就重置为100,这个场景一般是取出来再判断,再存放进行,就至少存在2次IO,用lua脚…...

JavaSec-RCE

简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性&#xff0c…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...

Qt 事件处理中 return 的深入解析

Qt 事件处理中 return 的深入解析 在 Qt 事件处理中&#xff0c;return 语句的使用是另一个关键概念&#xff0c;它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别&#xff1a;不同层级的事件处理 方…...