一、学习目标

了解浮游水印如何实现

了解鬼畜水印效果如何实现

二、了解使用OpenCV制作视频特效

2.1 读取视频

首先我们需要准备一个视频素材,我的路径是‘D:\test\02.mp4’,使用VideoCapture进行读取。代码如下:

capture2=cv2.VideoCapture(r'D:\test\02.mp4')

当然,在开头还需要引入库:

import cv2

随后我们创建一个窗口,防止我们的内容过于过大会让我们观察不便。代码如下:

cv2.namedWindow("Image",cv2.WINDOW_NORMAL)

接下来我们需要读取图片的每一帧,每一帧使用read方法进行读取返回一个res与图片img。代码如下:

r,img=capture2.read()

我们现在只需要加个循环就可以每一帧读取图片进行播放了。代码如下:

while True:

r,img=capture2.read()

if r==False:

break

cv2.imshow("Image", img)

k=cv2.waitKey (40)

if k==27:

break

运行一下代码可以看到视频:

好了,基本没啥事就可以开始了。

2.2 了解需求

我们先看一下我们要完成的效果。

以上图片中红色区域的白色文字则是我需要添加的水印,并且水印可以游走于整个屏幕,不规则的进行运动。

2.3 使用putText先加点内容

我们在前几节课程有了解putText而已在视频上进行文字的添加,并且putText方法可以指定文字添加的位置。我们首先先在固定位置添加文本信息。在之前我们要使程序更灵活,我们先创建几个变量作为putText方法的参数。代码如下:

#字体

fontx=300

fonty=0

fontpos=(fontx,fonty)#字体所在的坐标

#字体宽度与厚度

font_size=1

font_bold=1

#字体内容

font_text=r'Blog 1_bit @ebaina @csdn'

#字体颜色

B_=255

G_=255

R_=255

font_color=(B_,G_,R_)

font=cv2.FONT_HERSHEY_SIMPLEX#字体

随后将参数传入到putText方法中:

cv2.putText(img,font_text,fontpos, font,font_size,font_color,font_bold)

这时我们运行程序可以看到文字信息已经在视频中出现,那putText代码添加到哪个位置呢?putText方法添加到视频的循环读取帧中,对每一帧的图片进行处理,将字体添加到每一帧的图片中即可。这一小阶段的完整代码如下:

import cv2

#字体

fontx=300

fonty=0

fontpos=(fontx,fonty)#字体所在的坐标

#字体宽度与厚度

font_size=1

font_bold=1

#字体内容

font_text=r'Blog 1_bit @ebaina @csdn'

#字体颜色

B_=255

G_=255

R_=255

font_color=(B_,G_,R_)

font=cv2.FONT_HERSHEY_SIMPLEX#字体

while True:

r,img=capture2.read()

if r==False:

break

cv2.putText(img,font_text,fontpos, font,font_size,font_color,font_bold)

cv2.imshow("Image", img)

k=cv2.waitKey (40)

if k==27:

break

2.4使用水印内容在视频中游动

接下来我们开始对视频添加的文本信息当作水印开始在视频中游动,这种游动的视频可以维护自己的原创性,防止不法的自媒体工作者抄袭、搬运等。

想要使文本信息能够浮动,我们首先可以实现文本信息的上下移动。上下移动则是y轴的上下增加增加。我们可以在每一帧的图片中,给文本信息增加一个单位。在OpenCV中左上角的x与y值是0和0,宽度最大长度为当前帧图片的width,高度最大高度为图片的height,如图:

那么这时,我们可以先控制上下移动,也就是y周的持续增加。由于之前我们已经建立好了fonty这一个y轴坐标值的变量。此时我们只需要在帧读取的循环中加入如下代码即可:

fonty+=1

fontpos=(fontx,fonty)

这个时候我们运行程序,发现我们的文本信息从上往下运动,但是会超过最底部边界。那么在这时就可以增加一个半段,弱大于图片的height则进行减法,若小于0则变成加法。我们可以使用一个状态开关,我们在循环读帧之前创建一个变量fIsUp,随后在循环中读取每一帧的高度:

vimg_height=img.shape[0]

判断fonty是否大于vimg_height或者等于0,代码如下:

#字体漂浮上下开关

if fonty==0:

fIsUp=0

elif fonty==vimg_height:

fIsUp=1

这时开关如果是上浮则剪,下浮则加,代码如下:

#上下移动就按

if fIsUp:

fonty-=1

else:

fonty+=1

此时我们运行程序,发现y坐标可以上下进行移动,但是x轴的移动却不行。那如何增加x轴的移动呢?原理一样,使用一个开关表示浮动左右是否开启,如果开启则往一个方向,不开启则往另外一个方向。此时两个浮动都开启,那么文本就可以在整个视频中像一片羽毛一样开始移动了。代码如下,首先设置左移开关:

vimg_width=img.shape[1]

#字体漂浮左右开关

if fontx==0:

fIsleft=1

elif fontx==vimg_width:

fIsleft=0

然后是左右移动的计算:

#左右移动计算

if fIsleft:

fontx+=1

else:

fontx-=1

这一部分的代码如下:

import cv2

import numpy as np

import random

#字体

fontx=300

fonty=0

fontpos=(fontx,fonty)#字体所在的坐标

#字体宽度与厚度

font_size=1

font_bold=1

#字体内容

font_text=r'Blog 1_bit @ebaina @csdn'

#字体颜色

B_=255

G_=255

R_=255

font_color=(B_,G_,R_)

#左右开关 0关闭 1开启

fIsleft,fIsUp=0,0

font=cv2.FONT_HERSHEY_SIMPLEX#字体

capture2=cv2.VideoCapture(r'D:\test\02.mp4')

while True:

r,img=capture2.read()

if r==False:

break

#宽高获取

vimg_height=img.shape[0]

vimg_width=img.shape[1]

#字体漂浮左右开关

if fontx==0:

fIsleft=1

elif fontx==vimg_width:

fIsleft=0

#字体漂浮上下开关

if fonty==0:

fIsUp=0

elif fonty==vimg_height:

fIsUp=1

#左右移动计算

if fIsleft:

fontx+=1

else:

fontx-=1

#上下移动就按

if fIsUp:

fonty-=1

else:

fonty+=1

fontpos=(fontx,fonty)#字体位置悬浮

print('fontpos:',fontpos,' wh:',img.shape,' f:',vimg_width)

cv2.putText(img,font_text,fontpos, font,font_size,font_color,font_bold)

cv2.imshow("Image", img)

k=cv2.waitKey (40)

if k==27:

break

cv2.waitKey (0)

cv2.destroyAllWindows()

以上代码中可以使用:

print('fontpos:',fontpos,' wh:',img.shape,' f:',vimg_width)

查看具体的文本位置的变换,当文本坐标x等于图片宽度时立即减少。同理,文本高度值也是一样:

2.5使用随机更带感

我们在前几节中了解了,其实文本颜色可以进行随机变换,更加好看,并且大小值也可以进行变换。实现起来很简单,只需要import random,给予数值随机数即可。代码如下,添加在帧读取中:

#字体颜色随机

B_=random.uniform(0,255)

G_=random.uniform(0,255)

R_=random.uniform(0,255)

font_color=(B_,G_,R_)

#字体大小,厚度

font_size=random.uniform(0,5)

整个项目完整代码如下:

import cv2

import random

#字体

fontx=300

fonty=0

fontpos=(fontx,fonty)#字体所在的坐标

#字体宽度与厚度

font_size=1

font_bold=1

#字体内容

font_text=r'Blog 1_bit @ebaina @csdn'

#字体颜色

B_=255

G_=255

R_=255

font_color=(B_,G_,R_)

#左右开关 0关闭 1开启

fIsleft,fIsUp=0,0

font=cv2.FONT_HERSHEY_SIMPLEX#字体

capture2=cv2.VideoCapture(r'D:\test\02.mp4')

while True:

r,img=capture2.read()

r3,img3=capture3.read()

if r==False:

break

#宽高获取

vimg_height=img.shape[0]

vimg_width=img.shape[1]

#字体漂浮左右开关

if fontx==0:

fIsleft=1

elif fontx==vimg_width:

fIsleft=0

#字体漂浮上下开关

if fonty==0:

fIsUp=0

elif fonty==vimg_height:

fIsUp=1

#左右移动计算

if fIsleft:

fontx+=1

else:

fontx-=1

#上下移动就按

if fIsUp:

fonty-=1

else:

fonty+=1

fontpos=(fontx,fonty)#字体位置悬浮

#字体颜色随机

B_=random.uniform(0,255)

G_=random.uniform(0,255)

R_=random.uniform(0,255)

font_color=(B_,G_,R_)

#字体大小,厚度

font_size=random.uniform(0,5)

print('fontpos:',fontpos,' wh:',img.shape,' f:',vimg_width)

cv2.putText(img,font_text,fontpos, font,font_size,font_color,font_bold)

cv2.imshow("Image", img)

k=cv2.waitKey (40)

if k==27:

break

cv2.waitKey (0)

cv2.destroyAllWindows()

效果如下:

这个时候水印文本会不断的更改位置,并且变换颜色和大小。

三、总结

了解了如何灵活运用技术,使视频添加浮动水印

了解了如何使用随机数使文本信息更带感

opencv python 识别视频水印_[python opencv 计算机视觉零基础到实战]二十二、给视频制作浮动的带感水印...相关推荐

  1. 【python opencv 计算机视觉零基础到实战】二、 opencv文件格式与摄像头读取

    一.学习目标 了解图片的结构属性 了解如何捕获视频 了解waitkey的使用方法 目录 [python opencv 计算机视觉零基础到实战] 一.opencv的helloworld [[python ...

  2. [python opencv 计算机视觉零基础到实战] 一 opencv的helloworld

    前置条件 说明:本系列opencv实战教程将从基础到实战,若只是简单学习完python也可以通过该教程完成一般的机器学习编程:文中将会对很多python的基础内容进行讲解,但由于文章定位的原因将不会赘 ...

  3. [python opencv 计算机视觉零基础到实战] 十一找到图片中指定内容

    一.学习目标 了解图片内容定位方法matchTemplate使用 了解minMaxLoc方法使用 上一篇<[python opencv 计算机视觉零基础到实战] 十.图片效果毛玻璃> 如有 ...

  4. [python opencv 计算机视觉零基础到实战] 十、图片效果毛玻璃

    一.学习目标 了解高斯模糊的使用方法 了解毛玻璃的图片效果添加 了解如何自己做一个噪声图片 上一篇:[python opencv 计算机视觉零基础到实战] 九.模糊 如有错误欢迎指出~ 二.了解模糊与 ...

  5. [python opencv 计算机视觉零基础到实战] 八、ROI泛洪填充

    一.学习目标 了解什么是ROI 了解floodFill的使用方法 如有错误欢迎指出~ 目录 [python opencv 计算机视觉零基础到实战] 一.opencv的helloworld [[pyth ...

  6. [python opencv 计算机视觉零基础到实战] 七、逻辑运算与应用

    一.学习目标 了解opencv中图像的逻辑运算 了解opencv中逻辑运算的应用 目录 [python opencv 计算机视觉零基础到实战] 一.opencv的helloworld [[python ...

  7. [python opencv 计算机视觉零基础到实战] 六、图像运算

    一.学习目标 了解opencv中图像运算的方法 了解opencv中图像运算的运用 如有错误欢迎指出~ 二.了解OpenCV中图像运算的运用 目录 [python opencv 计算机视觉零基础到实战] ...

  8. [python opencv 计算机视觉零基础到实战] 四、了解色彩空间及其详解

    一.学习目标 了解什么是色彩空间 了解opencv中色彩空间的转换 目录 [python opencv 计算机视觉零基础到实战] 一.opencv的helloworld [[python opencv ...

  9. [python opencv 计算机视觉零基础到实战] 三、numpy与图像编辑

    一.学习目标 了解图片的通道与数组结构 了解使用numpy创建一个图片 了解使用numpy对图片的一般操作方法 目录 [python opencv 计算机视觉零基础到实战] 一.opencv的hell ...

最新文章

  1. 快捷键设置_win10自带截图工具如何使用 、设置快捷键
  2. 自定义手势解锁锁控件
  3. 2014-03-09 Spring的学习(1)------Spring管理Bean(实例化Bean)
  4. SAP CRM WebClient UI F2页面里from pre-processing table标签位的含义
  5. [kuangbin]各种各样的题单
  6. 如何检测本计算机耗电量,如何查看电脑耗电量?鲁大师查看电脑使用功率的方法...
  7. php里h和h的区别吗,编码h264h和h264b有什么区别
  8. Spring IOC容器-自动装配
  9. jsDelivr 缓存刷新小工具
  10. Google 对战微软阿里,AIoT 进入“战国时代”!
  11. Selenium3元素定位详解与封装
  12. 如何针对大数据进行分析
  13. PSP金手指CMF_r21d修改版安装方法
  14. c语言文件io的fork,15. C语言的fork
  15. 米家扫地机器人怎么加水_最省心的扫地机器人,米家扫地机器人1C:视觉动态导航实力强劲...
  16. [C语言]if语句的常见用法
  17. 4种常见的嵌入式开发系统
  18. 如何拯救拖延症??11大招总有一招帮你搞定
  19. eclipse项目名旁边一个红xx,解决办法
  20. java发送带图片的邮件代码

热门文章

  1. Kerberos的部署
  2. python多任务——进程基础介绍(Process)及多进程操作
  3. Scrapy中将数据保存到Excel和MySQL中
  4. 前沿重器[5] | 阿里小蜜的数据量分级处理机制
  5. 1、利用蓝牙定位及姿态识别实现一个智能篮球场套件(一)——用重写CC2541透传模块做成智能手环
  6. this.$confirm提示框
  7. 如何用Java画一个小乌龟
  8. android-注释超详细-高德地图实现定位和切换地图类型
  9. 视频教程-图标设计-UI
  10. android q微信打不开,微信打不开怎么回事?微信打不开怎么办?