本篇内容主要讲解“如何使用使用python+opencv解析视频并处理视频中的水印”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用使用python+opencv解析视频并处理视频中的水印”吧!
创新互联主营湟中网站建设的网络公司,主营网站建设方案,成都APP应用开发,湟中h5微信小程序开发搭建,湟中网站营销推广欢迎湟中等地区企业咨询
1. 使用python+opencv解析视频
使用opencv进行视频解析,获取每一帧图像后需要对该帧图像进行模块匹配进行水印图像查询。
(对多个视频操作,查询到水印的视频存储到list中等待下一步处理,未查询到的视频存储到失败list中)
logger.info('开始进行视频图像处理...')
watermark_path = "G:\\video\\watermark\\test.png"
video_path = "G:\\video\\video.mp4"
video = cv2.VideoCapture(video_path)
index = 0
success, frame = video.read()
while success:
logger.info('开始进行每一帧图像处理!')
// 通过opencv中模块匹配进行判断该帧是否存在水印
result = self.find_watermark(frame, watermark_path)
if result == 1:
self.deal_list.append(watermark_path, video_path)
video.release()
logger.info('视频匹配成功!跳出循环!')
return True
if index == 600:
logger.error('600帧均未找到视频水印!' + "路径:" + str(video_path))
video.release()
return False
success, frame = video.read()
index = index + 1
self.no_watermark_list.append(video_info)
logger.error('视频处理失败!没有找到帧图像!' + str(success) + "路径:" + str(video_path))
2. 使用opencv+numpy查询水印
logger.info('开始进行帧图像模块匹配...')
template = cv2.imread(watermark_path)
// 进行模块匹配
res = cv2.matchTemplate(img, template, cv2.TM_CCOEFF_NORMED)
// 指定一个阈值
threshold = 0.8
// 将匹配区域的坐标存储在numpy数组中
loc = np.where(res >= threshold)
x = loc[0]
y = loc[1]
if len(x) and len(y):
for pt in zip(*loc[::-1]):
// 存储找到水印的坐标方便ffmpeg进行水印去除操作
self.watermark_index_left = pt[0]
self.watermark_index_top = pt[1]
logger.info('帧图像模块匹配成功!left:' + str(pt[0]) + ",top:" + str(pt[1]))
return True
else:
logger.error('帧图像模块匹配失败!继续重试!')
return False
3. 使用ffmpeg处理视频中水印
ffmpeg需要在本地环境安装,windows安装自行搜索,安装后需配置环境变量!
logger.info('ffmpeg开始处理单个视频水印... 视频路径:' + video_path)
try:
// ffmpeg中去除水印,需要提供视频路径,水印在视频中坐标以及水印宽高
text = 'ffmpeg -i \"%s\" -vf "delogo=x=%s:y=%s:w=%s:h=%s:show=0" -c:a copy \"%s\" -y' % (
video_path, watermark_left, watermark_top, watermark_width, watermark_height, out_video_path)
res = os.system(text)
if res != 0:
self.no_watermark_list.append(video_path)
logger.error('ffmpeg处理单个视频水印失败! 视频路径:' + video_path)
return False
logger.info('ffmpeg处理单个视频水印成功! 视频路径:' + video_path)
return True
except Exception as e:
logger.error('ffmpeg处理单个视频水印出现异常! 视频路径:' + video_path + ";异常原因:" + str(e))
self.no_watermark_list.append(video_path)
return False无锡妇科医院哪家好 http://www.xasgfk.cn/
4. 使用tkinter构建图形界面
该处代码不全,具体创建,可参考其他文章
self.OpenLabel = Label(self, text="视频路径:")
self.OpenLabel.grid(row=0, column=0)
self.OpenEntry = Entry(self, textvariable=self.openVideoPath, width=45)
self.OpenEntry.grid(row=0, column=1)
self.OpenButton = Button(self, text="选择视频路径", command=self.selectOpenVideoPath)
self.OpenButton.grid(row=0, column=2)
self.OpenMarkLabel = Label(self, text="水印路径:")
self.OpenMarkLabel.grid(row=1, column=0)
self.OpenMarkEntry = Entry(self, textvariable=self.openMarkPath, width=45)
self.OpenMarkEntry.grid(row=1, column=1)
self.OpenMarkButton = Button(self, text="选择水印路径", command=self.selectOpenMarkPath)
self.OpenMarkButton.grid(row=1, column=2)
5. 使用pyinstaller打包应用
安装pyinstaller : pip install pyinstaller
进入python环境的Lib中找到pyinstaller,在该目录下运行cmd,执行以下命令
pyinstaller.exe -D -w --add-binary C:\Users\wjz\Anaconda3\envs\spiderTest\Lib\site-packages\cv2\opencv_ffmpeg410_64.dll;. E:\video\pyexe.py
说明:
1)-D 指的是生成结果是一个目录,各种第三方依赖、资源和exe同时存储在该目录
2)-w 指的是不生成黑窗口,直接显示图形化界面
3)–add-binary 后面是opencv的dll文件路径,如果不加可能生成的opencv版本出现问题
4)最后指定要打包的py文件路径
执行后会生成三个文件build,dist,pyexe.spec(指定文件名),主程序pyexe.exe入口在dist文件夹中
找到exe文件执行即可
到此,相信大家对“如何使用使用python+opencv解析视频并处理视频中的水印”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!