189 8069 5689

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

本篇内容主要讲解“如何使用使用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解析视频并处理视频中的水印”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!


文章名称:如何使用使用python+opencv解析视频并处理视频中的水印
链接URL:http://cdxtjz.com/article/pepsoi.html

其他资讯