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

用OpenCV去图片水印

# ============================================
# ## OpenCV去水印原理:
#
# 1. 确认图像的大小
# 2. 创建一个和图像尺寸一样大的纯黑色图像,也就是掩码mask
# 3. 确认水印的位置,也就是水印的起始点坐标(x, y)和水印的宽高w, h
# 4. 在掩码mask中,找到和水印同样的位置,也就是(x, y), (x + w, y + h)区域画出一个白色矩形
# 5. 调用cv2.inpaint()方法自动去水印
# ============================================# ============================================
# ## cv2.inpaint():
#
# result = cv2.inpaint(img, mask,  3,  cv2.INPAINT_TELEA)
# ###                   ↑    ↑     ↑        ↑
# ###                  图片  掩码  修复半径  修复算法
#
# result就是去水印后的结果图片
# ============================================# ============================================
# ## 参数含义:
#
# img:要去水印的图片
# mask:掩码
# 3:修复半径,从水印边缘往外找多少像素来填充,一般用 3-5 就够了
# cv2.INPAINT_TELEA:修复算法,有cv2.INPAINT_TELEA和cv2.INPAINT_NS
# ============================================import cv2
import numpy as npimg = cv2.imread('frame_000000.jpg')# 获取图片的尺寸:高、宽
img_shape = img.shape[:2]# 创建和图像大小一致的掩码mask,纯黑图
mask = np.zeros(img_shape, np.uint8)# 水印的位置
# 这里是直接给出水印的起始点坐标和宽高,有时候是需要通过其他方式来获取的
x = 834
y = 18
w = 100
h = 40# 在掩码中,和水印重叠的位置,画一个矩形并填充白色
cv2.rectangle(mask, (x, y), (x + w, y + h), 255, -1)# 调用inpaint()方法去水印
result = cv2.inpaint(img, mask, 3, cv2.INPAINT_TELEA)# 保存去水印后的图
cv2.imwrite("result.jpg", result)

 

去水印前:

image

去水印后:

image

 

http://www.jsqmd.com/news/692065/

相关文章:

  • 别再只用PictureBox了!C# Winform GDI+绘图实战:手把手教你打造自定义图表控件(.NET Framework 4.8)
  • 别再死记硬背了!用Python脚本模拟XCP协议CTO/DTO报文交互(附代码)
  • 花艺培训机构哪家好?调研评测版 - 速递信息
  • 鸿蒙系统编译(一):Gn与Ninja构建实战解析
  • 2026年论文写作如何去AI痕迹?高效免费降AI率工具必备 - 降AI实验室
  • Harness下一站,JiuwenClaw深度技术剖析,全面开启协同工程新范式
  • 别再手动画框了!Halcon shape_trans算子的7种形态变换全解析与避坑指南
  • 3步搞定文档迁移:feishu-doc-export 飞书文档批量导出实战指南
  • 2026年正信泵业性价比排名,正信泵业性价比高吗 - 工业设备
  • 别再只用TeamViewer了!NoMachine远程桌面‘session negotiation failed’错误排查与权限修复指南
  • 保姆级教程:在CentOS 9 Stream服务器上为Gnome桌面配置TigerVNC远程桌面(含安全加固与分辨率设置)
  • U-Mamba实战:从环境搭建到图像生成的完整避坑指南
  • 2026年4月 国内外氨氮分析仪十大品牌排名 - 仪表人小余
  • MacOS Qt 5开发环境配置实战:从安装到疑难问题排查
  • 材料智能:物理计算新范式与自组织系统
  • 6款二次元游戏模组管理终极指南:XXMI启动器如何简化你的游戏体验
  • Spring定时任务踩坑实录:Quartz Job里用SpringApplicationContext.getBean()为啥总报NoSuchBeanDefinitionException?
  • 打工人神器!零基础安装 OpenClaw 汉化中文版
  • 京东抢购自动化工具:告别手忙脚乱,3步实现智能秒杀
  • 数据分类与标签化处理(使用千问)
  • Ruoyi项目实战:一个‘是否缓存’勾选框,如何优雅管理Vue组件的keep-alive生命周期?
  • Win10隐私保护小技巧:彻底关闭文件资源管理器里的‘最近浏览’记录
  • 终极指南:使用Driver Store Explorer高效管理Windows驱动程序
  • TTS-Backup终极指南:如何一键备份你的桌游模拟器珍贵数据?
  • Oracle / ODA环境TRACE、alert日志定位与ADRCI清理 SOP_20260423
  • 罗技PUBG鼠标宏技术实现:智能后坐力补偿系统深度解析与配置指南
  • 腾讯游戏性能优化终极指南:ACE-Guard限制器完全教程
  • 单机分屏革命:Nucleus Co-Op如何让你在一台电脑上玩转多人游戏
  • Zend VM 执行 Opcode变成机器码,然后投喂给CPU执行这个机器码?
  • Jenkins + Gerrit 自动化流水线实战:从代码提交到Verified标签的全链路配置