最近有个视频想要去除水印,搜索了下市面上的产品,用了一圈发现效果都很拉跨。。大部分都是直接高斯模糊处理

另外,都只能处理矩形框的水印,对于我这种斜斜的布满整个视频的水印无法处理;

所以想自己试试用代码去水印看看是否可以更好。

处理的过程如下:

1 先把图片转到 HSV 色彩空间下,手动提取水印的 HSV 值范围;

2 提取多张水印模板,合成一张比较好的水印蒙版;

3 对视频的每帧水印进行处理,有2种方法,一种是opencv 自带的 inpaint ,一种是我自己写的随机替换水印的值为附近点的值,对比了下我的方法效果好一些;

下面的提取到的多个mask :

合成的mask,效果非常好:

当然也可以手动挑选单张效果比较好的mask:

最后效果对比:

OpenCV的inpaint方法

我的方法,自我感觉效果略好:

代码如下:

# coding:utf-8import numpy as np
import cv2path = r'23.mp4'def get_mask(src, count):rows, cols, channels = src.shapehsv = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)low_hsv = np.array([0, 0, 99])high_hsv = np.array([0, 0, 128])# high_hsv = np.array([0, 0, 145])mask = cv2.inRange(hsv, low_hsv, high_hsv)mask = cv2.erode(mask, None, iterations=2)  # 1,然后叠加多张图片会导致很多噪点, 3会导致没有有用信息# mask = cv2.erode(mask, None, iterations=1)  # 1,然后叠加多张图片会导致很多噪点, 3会导致没有有用信息# mask = cv2.dilate(mask, None, iterations=3)mask = cv2.dilate(mask, None, iterations=4)# 保存蒙版图片  每帧的mask 效果不一样,取十次的值cv2.imwrite("./mask_" + str(count)+".png", mask)np.save('./mask_'+ str(count), mask)return maskdef delete_l(src, mask):# 自定义替换随机附近点色彩值for i in range(src.shape[0]):for j in range(src.shape[1]):if mask[i, j] == 255:  # mask像素点255表示白色rgb = pick_random_p(src, mask, i, j)# src[i, j] = (255, 255, 255)  # 此处替换颜色,为BGR通道,不是RGB通道src[i, j] = rgb  # 此处替换颜色,为BGR通道,不是RGB通道return srcdef get_hsv_mouse(src):# 获取 hsv 数值rows, cols, channels = src.shapehsv = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)def getpos(event, x, y, flags, param):if event == cv2.EVENT_LBUTTONDOWN:  # 定义一个鼠标左键按下去的事件print("HSV is ",hsv[y, x])cv2.imshow('imageHSV', hsv)cv2.setMouseCallback("imageHSV", getpos)cv2.waitKey(0)cv2.destroyAllWindows()def read_mp4(gen_hsv=False, gen_mask=False):cap = cv2.VideoCapture(path)if not gen_hsv and not gen_mask:try:mask = np.load('mask.npy')# mask = np.load('./data/mask_1400.npy')except:print(" 蒙版还未生成 mask ")returnfps = 60fourcc = cv2.VideoWriter_fourcc(*'mp4v')  # 用于mp4格式的生成videowriter = cv2.VideoWriter("result.mp4", fourcc, fps, (mask.shape[1], mask.shape[0]))# 创建一个写入视频对象   w,hcount = 0mask_list = []while True:ret, frame = cap.read()count += 1if not gen_hsv and not gen_mask:print("count frame ", count)cv2.imshow('video0', frame)# 处理每一帧frame = delete_l(frame, mask)cv2.imshow('video1', frame)videowriter.write(frame)elif gen_hsv:# 生成样例图片cv2.imwrite('result.jpg', frame)cv2.waitKey(10)print('视频宽为', frame.shape[1],'视频高为', frame.shape[0])get_hsv_mouse(frame)elif gen_mask:if count%100 == 0:mask = get_mask(frame, count)  # 必须先读取一次视频,保存了再处理print(np.max(mask))mask_list.append(mask)if len(mask_list) > 40:breakif cv2.waitKey(2) & 0xff == ord('q'):breakif gen_mask:  # 混合多个蒙版temp = np.zeros(mask_list[0].shape, np.uint8)  # 创建一张空图像用于保存for m in mask_list:temp += mnp.clip(temp, 0, 255)cv2.imwrite("mask.png", temp)np.save('mask', temp)cap.release()cv2.destroyAllWindows()if not gen_hsv and not gen_mask:videowriter.release()# 依次运行下面三个函数就行了# 第一步 获取hsv值范围,以及视频高宽
# read_mp4(True, False)# 第二步 获取合成mask
# read_mp4(False, True)# 第三步 处理视频
# read_mp4()

如果想要处理图片稍微调整下代码就行了。

不过这个代码缺点也很明显,那就是非常慢。。。哈哈哈

视频去水印的Python代码相关推荐

  1. 小视频去水印原理及其代码?

    使用uview框架及其微信小程序云开发 仅供学习和交流, 首先讲一下原理 具体看下边 https://www.cnblogs.com/raicho/p/16025522.html 这个还是比较简单的, ...

  2. python 制作字符视频_20行Python代码实现视频字符化功能

    我们经常在B站上看到一些字符鬼畜视频,主要就是将一个视频转换成字符的样子展现出来.看起来是非常高端,但是实际实现起来确是非常简单,我们只需要接触opencv模块,就能很快的实现视频字符化.但是在此之前 ...

  3. 60集Python入门视频PPT整理 | Python代码的测试、调试与探查

    学习视频来源:<马哥教育-Python入门教程>

  4. LightGBM图解理论+视频+安装方法+python代码

    向AI转型的程序员都关注了这个号

  5. python叫什么语言-Python代码是什么语言

    Python代码是一种计算机程序设计语言,是一种动态的.面向对象的脚本语言,最初是用来编写自动化脚本的,随着版本的不断更新和语言新功能的添加,越来越多被用于独立的.大型项目的开发. Python代码是 ...

  6. Python爬虫:多平台短视频去水印下载器

    Python爬虫:多平台短视频去水印下载器 功能介绍 各平台分解 抖音 快手 微视 皮皮搞笑 总结 源码仓库 本教程描述的爬取方案定档与2020年10月26日 郑重申明:该文章介绍的技术仅供用于学习, ...

  7. python代码写好了怎么运行视频-Python的初学者你现在可以自己“看”到代码的运行了!...

    最近小编一直在给群里小伙伴解决各种的错误,尤其是对一些基础薄弱的同学来说,出现错误后更是一脸懵逼!直到有一天,小编找到了Python Tutor,终于解脱了. Python学习交流群542110741 ...

  8. python编程实例视屏-使用Python实现视频下载功能实例代码

    最近一两年短视频业务风生水起,各个视频网站都有各自特色的短视频内容.如果有一个程序可以把各大视频网站的热门用户最新发布的视频下载下来,不仅方便了观看,还可以将没有版权的视频发布在个人社交网站上,增加自 ...

  9. python红色的颜色表达式_50行Python代码实现视频中物体颜色识别和跟踪(必须以红色为例)...

    目前计算机视觉(CV)与自然语言处理(NLP)及语音识别并列为人工智能三大热点方向,而计算机视觉中的对象检测(objectdetection)应用非常广泛,比如自动驾驶.视频监控.工业质检.医疗诊断等 ...

最新文章

  1. 2011年使用天正建筑8.0注册版(附注册机)
  2. “云计算”三部曲之二:与“云”共舞——再谈云计算
  3. 如何在Linux中查看所有正在运行的进程
  4. Matlab:Matlab中常用的函数、案例详细攻略
  5. 最大均值差异java_MATLAB最大均值差异(Maximum Mean Discrepancy)
  6. 串口,com口,ttl,max232你应该知道的事
  7. python scrapy 基本操作演示代码
  8. 如何在Android上创建透明活动?
  9. Python的二进制位运算
  10. F1-Score相关概念
  11. 系统启动 之 Linux系统启动概述(1)
  12. python写小说阅读器_用python实现自己的小说阅读器
  13. 电脑录音软件哪个好?六款常见的录音软件介绍
  14. 用cmd命令行在windows系统中进行分区操作
  15. 文电通PDF编辑转换器[DocuCom PDF Gold] 8.0
  16. 动态物体检测(python)
  17. 华为机试题 好友关系管理
  18. Android辅助功能之自动安装apk
  19. java 调用felix_使用Eclipse启动任务将展开的软件包部署到Apache Felix
  20. mysql按经纬度排序_mysql根据经纬度查找排序

热门文章

  1. 怎么用j-link+j-flash烧写MM32
  2. 截至20161210中小板股票代码和名称
  3. Origin 不连续数据点做出连续曲线
  4. html给标题设置背景,怎么在html中设置一级标题背景
  5. 王者荣耀转系统服务器繁忙,换手机党的福音,王者荣耀开启跨系统角色转移,但这些问题要注意...
  6. ADSL上网TP-LINK路由器设置方法
  7. 单片机加减法计算器_十进制加减法计算器单片机设计.doc
  8. 论区块链技术如何赋能社交代币并打造创作者经济新局面
  9. 计算机设置表格内框线,word表格和边框在哪里 exl表格内框线怎么设置
  10. html本地化软件,如何为本地化做准备 (HTML)