需要实现的功能:
用OpenCV打开一段视频,将每一帧画面压缩成540p,对画面进行垂
直翻转,转为黑白,然后添加高斯噪声,把处理好的每一帧画面保存
成一个mp4文件保存到本地
Python代码如下:
import cv2
import numpy as np #高斯噪音需要一些数学运算#给视频添加高斯噪声类
def add_gaussion_noise(image): #image传入的是视频中读取到的每一个画面rows, col = image.shape #获取这个画面的尺寸信息 有多少行rows 有多少列colmean = 0 #设定平均值为0sigma = 15 #∑ 数学中的求和号gauss = np.random.normal(mean, sigma, (rows, col)) #做出一个高斯噪声(纯噪声)noisy = image + gauss #把画面和噪声相叠加后产生带噪声的图片noisy_img = np.clip(noisy, 0, 255) #np.clip限定带噪声的像素值的范围在0-255return noisy_img.astype(np.uint8) #把图片转成整数形式返回#输入和输出视频文件名
input_video = "./outdoor.mp4"
output_video = "./output02.mp4"#打开输入视频
cap = cv2.VideoCapture(input_video)#获取视频的帧率和帧大小
fps = int(cap.get(cv2.CAP_PROP_FPS))
frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))#计算新的帧大小(540p)
new_height = 540
new_width = int((new_height / frame_height) * frame_width)#创建视频写入对象
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter(output_video, fourcc, fps, (new_width, new_height),isColor=False)
#在循环中不停读取每一帧做处理
while True:ret, frame = cap.read()if not ret:break#调整帧率大小frame = cv2.resize(frame, (new_width, new_height))#转换为灰度图像frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)#垂直翻转画面frame = cv2.flip(frame, 1)#添加高斯噪声frame = add_gaussion_noise(frame)#写出输出视频out.write(frame)#释放资源并关闭窗口
cap.release()
out.release()
cv2.destroyAllWindows()
生成的文件检测后是没问题的