材料网站上大多数下载的视频都保留了水印,使用这些视频对用户产生了较大的干扰,很不方便,需要用某种方法尽可能地去除。参考资料显示,视频去水印有以下几种常见方法:
剪裁视频空间区域,只保留干净的部分,当水印 logo出现在视频的边角时比较合适,如优酷视频、腾讯视频以及电视台 logo等。尽管这样会损失一部分内容,但多数情况下能够保留大部分内容,可以使用格式工厂、狸窝等视频编辑软件来完成操作。这种处理方法比较常见,用户还经常在原来的水印区域添加新的水印 orz...,当水印被水印覆盖的区域较光滑时,这一处理方式比较常见,用户还经常会在原来的水印区域添加新的水印 orz...,当水印遮盖的区域较光滑时,这一处理方法也会丢失 logo下的细节,可以用爱剪辑的方式添加新的水印。我们知道,最好的算法是基于(成熟)去水印算法,在 Google论文《On the Effectiveness of VisibleWatermarks中提到的优化算法,该算法对图片水印进行处理,当水印在多个图之间完全相同时有奇效,水印去水印完全相同时有奇效,但是可以考虑在稍微降低品质的条件下对该算法进行优化。对水印进行简单粗暴的删除,获取一段视频,想方设法得到水印图片,假设透明度为,通过加水印的反向操作,得到大致无水印的结果,这种方法不能去除水印,但是如果不仔细观察,剩余部分就不会很明显。
就我遇到的情况而言,不同网站上主要有五种水印,模糊处理成本很高, Google的算法速度太慢,实践起来困难不少,没有进行过多的研究,如图1-5所示为水印减除前后效果
图中经常有多余的信息,如水印等,常常困扰了多少痴男怨女。
看到简书中有趣的一段内容。所以就把它拿来做吧。
去除水印的要害
#图片二值化,将颜色变为0 [200,200,200]-[250,250,250]
thresh=cv2.in Ra nge (img,np.ar ray ([200,200,200]),np.ar ray ([250,250,250]))
重点是如何选择区间以外的颜色,使颜色由0变为0。
再试试几次。
其颜色是红色、黄色和蓝色。数值为0-255。每个通道的数值越大,颜色块的组合就越明亮。该值越小越暗。若水印与图片其他部分存在明显差距,还是能找到的,效果应该也可以。
没有对 CV进行研究,就无法给出更好的方案。
随机应变学习下 CV
import cv2
import numpy as np
path="10.jpg"
img=cv2.imread(path,1)
hight,width,depth=img.shape[0:3]
#hight=img.shape[0]
#width=img.shape[1]
#depth=img.shape[2]
#图片二值化处理,把[200,200,200]-[250,250,250]以外的颜色变成0
thresh=cv2.inRange(img,np.array([200,200,200]),np.array([250,250,250]))
#创建形状和尺寸的结构元素
kernel=np.ones((3,3),np.uint8)
#扩展待修复区域
hi_mask=cv2.dilate(thresh,kernel,iterations=1)
specular=cv2.inpaint(img,hi_mask,5,flags=cv2.INPAINT_TELEA)
cv2.namedWindow("image",0)
cv2.resizeWindow("image",int(width/2),int(hight/2))
cv2.imshow('image',img)
cv2.namedWindow('newimage',0)
cv2.resizeWindow('newimage',int(width/2),int(hight/2))
cv2.imshow('newimage',specular)
cv2.waitKey(0)
cv2.destroyAllWindows()