视频剪辑打马赛克哪个手机软件好用(打马赛克的软件哪个好视频),新营销网红网本栏目通过数据整理汇集了视频剪辑打马赛克哪个手机软件好用(打马赛克的软件哪个好视频)相关信息,下面一起看看。

  上一期,我们分享了如何给图片添加马赛克,但是很多时候,我们需要给视频添加马赛克。当然,你可以通过后处理软件想到。本文教你通过使用几行简单的代码,方便地给视频添加马赛克。

  添加马赛克第一步:给出要添加的视频或图片。

   2.利用人工智能技术识别图片或视频中的人脸。

   3.创建一个屏蔽层。

   4.为图片或视频添加屏蔽层。

   5.显示最终图片或将其实时同步到视频。

  创建一个屏蔽层,为图片或视频面添加马赛克。最重要的一步是创建一个屏蔽层。我们用两种方法对人脸进行编码。

  将numpy作为np导入

  导入cv2

   def face_blur(图像,因子=3.0):

   (h,w)=image.shape[:2]

   kW=int(w /系数)

   KH=int(h/factor) #高斯核

  如果kW % 2==0:

  千瓦-=1

  如果kH % 2==0:

   kH -=1

  返回cv2。GaussianBlur(image,(kW,kH),0)

  上面是一个非常简单的代码来创建一个屏蔽层。

  首先,我们得到图片的大小(h h,w)=image.shape[:2]]

  要使用高斯运算,我们需要计算高斯核的大小。

   kW=int(w /系数)

   kH=int(h /因子)

  高斯核的基本大小如上计算。只要高斯核的大小是奇数,我们检测基数的时候就需要改成奇数。最后用cv2.gaussianblur (image,(kw,KH),0)创建屏蔽层。

  函数型高斯滤波器是一种线性平滑滤波器,对去除高斯噪声有很好的效果。

  图像处理中高斯滤波的实现方式一般有两种:一种是与离散窗卷积,另一种是傅里叶变换。最常见的是第一种滑动窗口实现,这种实现只有在离散化窗口非常大,使用滑动窗口的计算量非常大的情况下才基于傅立叶变换。

   Opencv为高斯滤镜图形提供了GaussianBlur()函数,其原型如下:

   c : void Gaussian blur(input array src,OutputArray dst,Size ksize,double sigmaX,double sigmaY=0,int borderType=BORDER_DEFAULT)

  参数解释:

   .InputArray src:输入图像,可以是Mat类型,图像深度为CV_8U、CV_16U、CV_16S、CV_32F和CV_64F。

   .OutputArray dst:输出图像,与输入图像具有相同的类型和大小。

   .大小ksize:高斯核大小,与前面两个滤波器核大小不同。ksize.width和ksize.height可以不同,但这两个值必须是正奇数。如果这两个值为0,它们的值将由sigma计算。

  的标准偏差。X方向双sigmaX:高斯核函数

   .双sigmaY:高斯核函数在Y方向的标准差。如果sigmaY为0,该函数将自动将sigmaY的值设置为与sigmaX相同的值。如果sigmaX和sigmaY都为0,那么这两个值将由ksize.width和ksize.height计算得出,具体可以参考getGaussianKernel()函数。建议指定size、sigmaX和sigmaY。

   .int BORDER type=BORDER _ default 3360推断图像外部像素的一种便捷模式。有一个默认值border _ default。如果没有特殊需要更改,具体请参考borderInterpolate()函数。

  高斯屏蔽

  自建马斯克图像的高斯函数拼接非常平滑,但是和我们平时看到的马斯克不一样。我们创造了一个新的功能来创造我们自己的麝香。

   def face_blur(图像,块=5):

   (h,w)=image.shape[:2]

   xSteps=np.linspace(0,w,blocks 1,dtype="int ")

   ySteps=np.linspace(0,h,blocks 1,dtype="int ")

  对于范围(1,len(ySteps)):内的I

  对于范围(1,len(xSteps)):中的j

   startX=x steps[j1]

   startY=y steps[I1]

   endX=xSteps[j]

   endY=ySteps[i]

   roi=image[startY:endY,startX:endX]

   (B,G,R)=[int(x)for x in cv2 . mean(ROI)[:3]]

   cv2.rect

  angle(image, (startX, startY), (endX, endY),(B, G, R), -1)

  return image

  首先获取了图片的尺寸,把图片分成block*block的小方块

  计算每个小方块的初始位置与最终位置

  把每个小方块图片提取roi = image[startY:endY, startX:endX]

  opencv中封装了一个专门用于求解cv::Mat均值的函数,即cv::mean( cv::Mat),该函数会得到Mat中各个通道的均值,若要获取指定通道的均值,做进一步解析即可。

  最后把获取的平均值画到原始图片中,来实现加马赛克的效果

  马赛克

  函数中的blocks定义了图片需要进行马赛克的小方块的数量,以上图片的马赛克跟我们见到的很是类似

  加载模型,开启摄像头

  prototxtFacePath = “model/deploy.prototxt”

  weightsFacePath = “model/res10_300x300_ssd_iter_140000.caffemodel”

  faceNet = cv2.dnn.readNet(prototxtFacePath, weightsFacePath)

  capture = cv2.VideoCapture(0)

  time.sleep(2.0)

  首先我们加载需要的人脸检测模型

  使用cv2.dnn.readNet(prototxtFacePath, weightsFacePath)函数初始化一个人脸检测神经网络

  VideoCapture()中参数是0,表示打开笔记本的内置摄像头,参数是视频文件路径则打开视频,如cap = cv2.VideoCapture(“../高清.avi”)

  默认打开摄像头,然后遍历视频,实时添加马赛克

  读取视频帧,实时检测人脸

  while True:

  ret, frame = capture.read()

  frame = cv2.resize(frame, (600,400))

  (h, w) = frame.shape[:2]

  blob = cv2.dnn.blobFromImage(frame, 1.0, (300, 300),(104.0, 177.0, 123.0))

  faceNet.setInput(blob)

  detections = faceNet.forward()

  cap.read()按帧读取视频,ret,frame是获cap.read() 的两个返回值。其中ret是布尔值,如果读取帧是正确的则返回True,如果文件读取到结尾,它的返回值就为False。frame就是每一帧的图像,是个三维矩阵。

  获取图片的尺寸大小,然后进行图片blob值的计算blob = cv2.dnn.blobFromImage(image, 1.0, (300, 300),(104.0, 177.0, 123.0))

  最后进行人脸神经网络的预测

  faceNet.setInput(blob)

  detections = faceNet.forward()

  当检测到人脸后,对人脸进行分析识别

  for i in range(0, detections.shape[2]):

  confidence = detections[0, 0, i, 2]

  if confidence 0.5:

  box = detections[0, 0, i, 3:7] * np.array([w, h, w, h])

  (startX, startY, endX, endY) = box.astype(“int”)

  face = frame[startY:endY, startX:endX]

  face = face_blur(face, factor=4.0)

  frame[startY:endY, startX:endX] = face

  当检测到人脸后,提取所有人脸的置信度,我们判断大于0.5的人脸置信度为可靠人脸.

  计算人脸在图片中的位置(startX, startY, endX, endY) = box.astype(“int”)

  获取人脸图片ROI:face = frame[startY:endY, startX:endX]

  根据人脸的ROI图片来进行高斯模糊,以便达到添加马赛克的效果

  然后把添加马赛克的图片实时反馈到视频帧中

  显示视频

  cv2.imshow(“Frame”, frame)

  key = cv2.waitKey(1) 0xFF

  if key == ord(“q”):

  break

  cv2.stop()

  cv2.destroyAllWindows()

  最后实时显示视频。

   相关文章

  什么时候万圣节(万圣节是什么时候?)

  剪切的快捷键是什么(电脑常用的快捷键汇总)

  嫦娥奔月文言文(《嫦娥奔月》原文与译文)

  小投资加盟(一万元就能做的投资小项目)

  弥留之际的意思(弥留之际(解析))

  鲅鱼水饺的做法(这样调制的鲅鱼馅,鲜香不腥!)

  蚂蚱几条腿(四条腿的蚂蚱)

  环保项目有哪些(30万元适合投资的五个绿色环保项目)

  麦芽糖是什么(烘焙原料小贴士——“麦芽糖”)

  一汤匙(一汤匙、一茶匙是多少吗?)

  清蒸鲽鱼的做法(清蒸鲽鱼的家常做法)

  宋太祖怕史官(宋太祖居然会怕一个小小史官?)

  更多视频剪辑打马赛克哪个手机软件好用(打马赛克的软件哪个好视频)相关信息请关注本文章,本文仅仅做为展示!