温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何使用使用python+opencv解析视频并处理视频中的水印

发布时间:2021-09-04 14:41:44 来源:亿速云 阅读:329 作者:chen 栏目:编程语言

本篇内容主要讲解“如何使用使用python+opencv解析视频并处理视频中的水印”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用使用python+opencv解析视频并处理视频中的水印”吧!

  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解析视频并处理视频中的水印”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI