【Python】使用 Python 检测图像中(色差对比度较大)的水印
我已经从你的 全世界路过
像一颗流星 划过命运 的天空
很多话忍住了 不能说出口
珍藏在 我的心中
只留下一些回忆
🎵 牛奶咖啡《从你的全世界路过》
前言
在图像处理领域中,检测图像中的水印是一项重要任务。水印通常用于保护图像版权,但在某些情况下,识别和去除水印也非常重要。在这篇博客中,我们将展示如何使用 Python 及其相关库(如PIL和Pandas)来检测图像中的水印。
环境准备
在开始之前,请确保你已经安装了以下库:
- Pillow
- Pandas
- Numpy
你可以使用以下命令安装这些库:
pip install pillow pandas numpy
代码实现
以下是完整的代码实现,展示了如何读取图像、转换为灰度图像、调整大小、识别非黑白灰色像素,并计算这些像素的比例以判断图像中是否存在水印。
# -*- coding:utf-8 -*-
# @author: xrx
# @time: 2024/6/12 13:57
# @project: SH4NH4I
# @file: main.py
# @software: PyCharm
# desc:
import pandas as pd
import numpy as np
from PIL import Imagedef is_gray_pixel(r, g, b, gray_threshold=10):return abs(r - g) < gray_threshold and abs(g - b) < gray_threshold and abs(r - b) < gray_thresholddef detect_watermark(image_path, threshold=0.2, fixed_size=(800, 600), gray_threshold=10):image = Image.open(image_path)image = image.convert("RGB")image = image.resize(fixed_size)data = np.array(image)height, width, _ = data.shapedf = pd.DataFrame({'R': data[:, :, 0].flatten(),'G': data[:, :, 1].flatten(),'B': data[:, :, 2].flatten()})df['is_color'] = ~((df['R'] == 0) & (df['G'] == 0) & (df['B'] == 0) |(df['R'] == 255) & (df['G'] == 255) & (df['B'] == 255) |df.apply(lambda row: is_gray_pixel(row['R'], row['G'], row['B'], gray_threshold), axis=1))watermark_ratio = df['is_color'].mean()has_watermark = watermark_ratio > thresholdreturn has_watermark, watermark_ratio# 示例使用
image_paths = ["img.png", "img_1.png", "img_2.png", "img_3.png", "img_4.png"] # 替换为你的图像路径
for image_path in image_paths:has_watermark, watermark_ratio = detect_watermark(image_path)print(f"Image: {image_path}, Has watermark: {has_watermark}, Watermark ratio: {watermark_ratio:.4f}")
代码解释
is_gray_pixel函数:
该函数用于判断一个像素是否为灰色。通过比较R、G、B值之间的差异是否小于设定的阈值(gray_threshold),来确定该像素是否为灰色。
detect_watermark函数:
该函数用于检测图像中是否存在水印。具体步骤如下:
- 读取图像并转换为RGB格式。
- 将图像调整为固定大小,以便统一处理。
- 将图像数据转换为Pandas DataFrame。
- 识别非黑白灰色像素,并计算这些像素的比例。
- 判断非黑白灰色像素的比例是否超过设定的阈值(threshold),从而确定图像中是否存在水印。
示例使用:
通过循环处理多张图片,调用detect_watermark函数并输出结果。
实验结果
使用示例代码中的多张图片,检测结果如下:
Image: img.png, Has watermark: True, Watermark ratio: 0.0567
Image: img_1.png, Has watermark: False, Watermark ratio: 0.0032
Image: img_2.png, Has watermark: True, Watermark ratio: 0.0875
Image: img_3.png, Has watermark: False, Watermark ratio: 0.0104
Image: img_4.png, Has watermark: True, Watermark ratio: 0.0321
从结果可以看出,该方法能够有效检测图像中的水印,并输出水印的比例。
总结
通过本文,我们展示了如何使用Python及其相关库来检测图像中的水印。该方法通过识别非黑白灰色像素,并计算这些像素的比例,来判断图像中是否存在水印。你可以根据具体需求调整阈值,以提高检测的准确性。
希望这篇文章对你有所帮助。如果有任何问题或建议,欢迎在评论区留言讨论。
相关文章:
【Python】使用 Python 检测图像中(色差对比度较大)的水印
我已经从你的 全世界路过 像一颗流星 划过命运 的天空 很多话忍住了 不能说出口 珍藏在 我的心中 只留下一些回忆 🎵 牛奶咖啡《从你的全世界路过》 前言 在图像处理领域中,检测图像中的水印是一项重要任务。水印通常用于保护图像…...
最短路:Bellman-Ford
最短路:Bellman-Ford 题目描述参考代码 题目描述 输入样例 3 3 1 1 2 1 2 3 1 1 3 3输出样例 3参考代码 #include <iostream> #include <cstring> #include <algorithm>using namespace std;const int N 510, M 10010;int n, m, k; int dist…...
深度学习的分类网络
深度学习的分类网络 深度学习的分类网络(Classification Networks)是用于将输入数据分配到预定义类别的神经网络。它们广泛应用于图像分类、文本分类、语音识别等任务。以下是对深度学习分类网络的详细介绍,包括其基本概念、主要架构、常见模…...
Si24R05—高度集成的低功耗 2.4G+125K SoC 芯片
Si24R05是一款高度集成的低功耗SoC芯片,具有低功耗、Low Pin Count、宽电压工作范围,集成了13/14/15/16位精度的ADC、LVD、UART、SPI、I2C、TIMER、WUP、IWDG、RTC、无线收发器、3D低频唤醒接收器等丰富的外设。内核采用RISC-V RV32IMAC(2.6 …...
layuimini框架实现点击菜单栏回到起始页
在layui页面中,如果使用了 window.location.href""进行了页面跳转,再点击菜单栏是不会显示起始页,而是跳转后的页面, 解决: 在miniTab.js文件中找到:listen方法 将其中修改为: if …...
【ubuntu22.04~mysql-MHA-mycat】
ubuntu22.04~mysql-MHA-mycat 前言一、安装指定版本mysql-server(8.0.23)1、安装mysql2、启用修改mysql配置1、安装3、修改权限3.1、用户密码存放位置,3.2、创建用户root@%4、mysql配置文件my.cnf修改1、主节点my.cnf2、slave1~my.cnf修改项3、slave2~my.cnf修改项5、重启mys…...
Java Reflection 反射使用 完全指南
前言 Java 中的反射大家都不陌生,有很多很好的文章都进行了讲解,但是很难找到一篇文章能完全解释反射的所有用法,特别是反射获取这个对象的注解的信息和泛型信息,往往都停留在了获取类的函数、方法,构造上。所以这篇文…...
2024年适合学生写作业的台灯推荐:五款公认好用的护眼台灯
儿童的视力健康是每一个家庭都极为关注的问题。目前中国近视率居高不下,且呈现出年轻化、低龄化的趋势。儿童近视的问题愈发严重,如何才能让孩子在学习的同时,眼睛也能得到充分的保护?答案就是护眼台灯。护眼台灯通常拥有柔和的光…...
电商平台API电商平台数据传输(商品订单店铺数据采集)
API(Application Programming Interface)是一种用于应用程序之间相互通信和交互的接口。它定义了一组规范和协议,允许软件系统之间传递数据和请求服务。 API的基本概念包括: 1. 接口:API作为接口,提供了一…...
【LeetCode每日一题】3067. 在带权树网络中统计可连接服务器对数目-DFS和图
Hey我的编程小伙伴们👋,今天我要和大家分享一道我在LeetCode上遇到的超有趣的题目——编号3067的在带权树网络中统计可连接服务器对数目。这是一道非常适合练习DFS和图的题目哦!🤓💻 邻接图是什么? 在我们…...
java中的时间相关类
LocalDate: 用于表示日期。 public final class LocalDate {private final int year;private final int month;private final int day;}LocalTime: 用于表示时间。 public final class LocalTime {private final byte hour;private final byte minute;private final byte se…...
大模型的现状与未来:探索腾讯元宝APP及其他AIGC产品
前言 随着近日腾讯元宝APP的正式上线,国内大模型产品又添一员。近年来,随着人工智能技术的快速发展,AIGC(AI生成内容)产品逐渐成为技术与商业应用的热点。各大互联网厂商纷纷推出自己的大模型产品,以期在这…...
记录一个apisix修改后台接口超时时间的方法
垃圾程序猿搞了个数据导入,解析校验比较复杂,1000条就要70秒。apisix默认60s超时,导致提交导入功能总是失败。 非要先调整超时时间。这里记录一下 到服务器配置yaml如下: apiVersion: apisix.apache.org/v2 kind: ApisixUpstrea…...
地产样板间vr全景云展平台降低售房压力
在数字化浪潮的推动下,传统的实体展厅正面临着巨大的转型压力。高昂的搭建、物流、安保成本,以及展览的周期性和资源浪费,都成为了展商们不得不面对的难题。然而,现在有了商品3D线上展台搭建编辑器,这些问题都迎刃而解…...
性能测试2【搬代码】
1.性能测试脚本完善以及增强 2.jmeter插件安装以及监控使用 3.性能压测场景设置(基准、负载、压力、稳定性) 4. 无界面压测场景详解 一、性能测试脚本完善以及增强 使用控制器的目的是使我们的脚本更加接近真实的场景 1.逻辑控制器: 【事务控制器】&…...
Chromium源码阅读:深入理解Mojo框架的设计思想,并掌握其基本用法(1)
Mojo简介 Mojo 是一个运行时库的集合,提供与平台无关的通用 IPC 原语抽象、消息 IDL 格式以及具有针对多种目标语言的代码生成的绑定库,以便于跨任意进程间和进程内边界传递消息。 Mojo 分为清晰分离的层,子组件的基本层次结构如下ÿ…...
通用大模型VS垂直大模型对比
通用大模型和垂直大模型的区分主要在于它们的设计目的、应用范围、训练数据、优化目标和使用场景。以下是一些关键点,用以区分这两种模型: 设计目的: 通用大模型:设计用于处理多种类型的任务,不特定于某一领域。垂直大…...
时尚解决方案来袭:几分钟即可生成高清商拍大片
在时尚行业,视觉展示的重要性不可小觑。商品图片不仅代表品牌的风格调性,而且直接影响消费者的购买行为。可以说,视觉营销在服装行业中的地位至关重要。 尽管如此,视觉营销的传统产出渠道——商业摄影,因其高成本、复杂…...
【每日一练】day1
✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心哦!✨✨ 🎈🎈作者主页: 🎈丠丠64-CSDN博客🎈 ✨✨ 帅哥美女们,我们共同加油!一起…...
GA/T 1400 (非标)视图库网关
GA/T 1400 (非标)视图库网关 应用概述: GAT1400视图库网关产品是公司“分布式综合安防管理平台”下的子系统 针对以下遇到应用场景定制开发、优化后形成的网关产品,具备兼容性高、可扩展、可功能定制、可OEM等优点。 视图库网关…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...
STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...
LangFlow技术架构分析
🔧 LangFlow 的可视化技术栈 前端节点编辑器 底层框架:基于 (一个现代化的 React 节点绘图库) 功能: 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...
Qt 事件处理中 return 的深入解析
Qt 事件处理中 return 的深入解析 在 Qt 事件处理中,return 语句的使用是另一个关键概念,它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别:不同层级的事件处理 方…...
uniapp 实现腾讯云IM群文件上传下载功能
UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中,群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS,在uniapp中实现: 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...
