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

基于python的图像去水印

1 代码

import cv2
import numpy as npdef remove_watermark(image_path, output_path):# 读取图片image = cv2.imread(image_path)# 转换为灰度图gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 使用中值滤波去除噪声median_filtered = cv2.medianBlur(gray, 5)# 计算图像的梯度laplacian = cv2.Laplacian(median_filtered, cv2.CV_64F)# 将梯度图像转换为8位无符号整数laplacian_8u = np.uint8(np.absolute(laplacian))# 使用阈值操作找到潜在的水印区域_, thresholded = cv2.threshold(laplacian_8u, 30, 255, cv2.THRESH_BINARY)# 对阈值图像进行形态学操作,填充孔洞并平滑边缘kernel = np.ones((3, 3), np.uint8)closing = cv2.morphologyEx(thresholded, cv2.MORPH_CLOSE, kernel, iterations=2)# 创建一个掩码,将潜在的水印区域设置为白色mask = np.zeros_like(image)mask[closing == 255] = [255, 255, 255]# 将掩码转换为单通道图像mask_gray = cv2.cvtColor(mask, cv2.COLOR_BGR2GRAY)# 使用掩码去除水印result = cv2.inpaint(image, mask_gray, 3, cv2.INPAINT_TELEA)# 保存去水印后的图片cv2.imwrite(output_path, result)remove_watermark('input.jpg', 'output.jpg')

2 去水印效果

图2-1 去水印前后对比

        从图2-1可以看出并没有完美去除水印,这是由水印与背景颜色接近造成的,后面我会用深度学习的方法探索一番。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • ArcGIS如何快速对齐两个图层
  • 为什么品牌需要做 IP 形象?
  • JAVA零基础学习1(CMD、JDK、环境变量、变量和键盘键入、IDEA)
  • 《系统架构设计师教程(第2版)》第11章-未来信息综合技术-06-云计算(Cloud Computing) 技术概述
  • 成为CMake砖家(2): macOS创建CMake本地文档的app
  • Sentinel-1 Level 1数据处理的详细算法定义(三)
  • 计算机网络高频面试题
  • sql面试题
  • 二次开发源码 借贷系统uniapp/借贷认证系统/小额信贷系统/工薪贷APP/资金贷系统h5
  • idea:解决Maven报错 Properties in parent definition are prohibited
  • 如何追查一个packet在linux 系统哪里丢失
  • urllib的使用
  • opencv学习:图像视频的读取截取部分图像数据颜色通道提取合并颜色通道边界填充数值计算图像融合
  • 14-- 二重积分
  • ubuntu系统Docker常用命令
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • js学习笔记
  • MySQL数据库运维之数据恢复
  • SQL 难点解决:记录的引用
  • Vue官网教程学习过程中值得记录的一些事情
  • 前端面试总结(at, md)
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • (14)Hive调优——合并小文件
  • (笔记)M1使用hombrew安装qemu
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (三分钟)速览传统边缘检测算子
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (小白学Java)Java简介和基本配置
  • (一)SpringBoot3---尚硅谷总结
  • (转)winform之ListView
  • .net Application的目录
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .NET的微型Web框架 Nancy
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?
  • @property @synthesize @dynamic 及相关属性作用探究
  • @vueup/vue-quill使用quill-better-table报moduleClass is not a constructor
  • [ Linux ] git工具的基本使用(仓库的构建,提交)
  • [Asp.net mvc]国际化
  • [autojs]逍遥模拟器和vscode对接
  • [dfs搜索寻找矩阵中最长递减序列]魔法森林的秘密路径
  • [G-CS-MR.PS02] 機巧之形2: Ruler Circle
  • [Head First设计模式]策略模式
  • [iphone-cocos2d]关于Loading的若干处理和讨论
  • [Java]快速入门二叉树,手撕相关面试题
  • [JAVA设计模式]第二部分:创建模式
  • [LeetCode系列]子集枚举问题[无重复元素]
  • [MT8766][Android12] 增加应用安装白名单或者黑名单
  • [Mysql-视图和存储过程]
  • [No000016]为什么假期计划总是做不到?
  • [office] excel如何计算毛重和皮重的时间间隔 excel计算毛重和皮重时间间隔方法 #笔记#学习方法
  • [python]socket之网络编程基础知识
  • [Spark、hadoop]Spark Streaming整合kafka实战
  • [Spring] Spring Web MVC基础理论