Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之二 简单视频闪白效果
目录
Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之二 简单视频闪白效果
一、简单介绍
Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。Python是一种解释型脚本语言,可以应用于以下领域: Web 和 Internet开发、科学计算和统计、人工智能、教育、桌面界面开发、软件开发、后端开发、网络爬虫。
这里使用 Python 基于 OpenCV 进行视觉图像处理,......
二、简单视频闪白效果实现原理
视频闪白效果是指在视频播放过程中,画面突然闪现出白色,并迅速恢复到正常画面的现象。这种效果常常用于吸引观众的注意力,或者用于视频编辑中的过渡效果。
在编程中实现视频闪白效果意味着在视频的特定帧或时间点上将画面变为白色,然后迅速恢复为原来的画面。通常情况下,闪白效果可以通过在视频处理过程中对特定帧进行处理,将所有像素值设置为白色来实现。
闪白的特效,观察其对视频图像的影响,可以看出,图像整体颜色变淡,这是由于图像过度曝光所致,因此按照设置图像曝光度来进行算法设计。
整个视频闪白特效的算法步骤如下:
(1)读取待处理的视频。
(2)设置出现闪白效果的帧数,比如对相邻5帧的图像进行Gamma参数调整使其过度曝光。
(3)设置视频中不变的帧数,比如以指定帧数为间隔来处理图像。
主要涉及函数简单说明:
三、简单视频闪白效果案例实现简单步骤
1、编写代码,实现图片增白效果
2、运行效果
3、具体代码
"""
图片增白处理
"""
import cv2
import numpy as np
def gamma_trans(img, gamma):
"""
增白处理
:param img:
:param gamma:
:return:
"""
gamma_table = [np.power(x / 255.0, gamma) * 255.0 for x in range(256)]
gamma_table = np.round(np.array(gamma_table)).astype(np.uint8)
return cv2.LUT(img, gamma_table)
def main():
img = cv2.imread('Images/DogFace.jpg')
# 设置窗口属性,并显示图片
cv2.namedWindow("Dog", cv2.WINDOW_KEEPRATIO)
cv2.imshow('Dog', img)
value_of_gamma = 0.1
image_gamma_correct = gamma_trans(img, value_of_gamma)
# 设置窗口属性,并显示图片
cv2.namedWindow("gamma_trans", cv2.WINDOW_KEEPRATIO)
cv2.imshow("gamma_trans", image_gamma_correct)
cv2.waitKey(0)
if __name__ == '__main__':
main()
4、编写代码,指定视频某些帧变白效果
5、运行效果
6、具体代码
"""
视频闪白效果
1、读取视频: 使用OpenCV库中的cv2.VideoCapture()函数读取视频文件,获取视频的帧率、尺寸等信息。
2、处理每一帧: 遍历视频的每一帧,对每一帧进行闪白处理。闪白处理通常有以下几种方法:
3、将特定帧的所有像素值设置为白色。
对特定帧进行增白处理,例如应用伽马变换使图像变亮。
写入输出视频: 将处理后的每一帧写入一个新的视频文件中,形成闪白效果的视频。
"""
import cv2
import numpy as np
def flash_white(frame, frame_index):
"""
闪白处理 1
:param frame:
:param frame_index:
:return:
"""
if frame_index < 5 or frame_index % 5 == 0:
return 255 * np.ones_like(frame, dtype=np.uint8)
else:
return frame
def flash_white2(frame, frame_index):
"""
闪白处理 2
:param frame:
:param frame_index:
:return:
"""
if frame_index < 5 or frame_index % 5 == 0:
return gamma_trans(frame, 0.03)
else:
return frame
def gamma_trans(img, gamma):
"""
增白处理
:param img:
:param gamma:
:return:
"""
gamma_table = [np.power(x / 255.0, gamma) * 255.0 for x in range(256)]
gamma_table = np.round(np.array(gamma_table)).astype(np.uint8)
return cv2.LUT(img, gamma_table)
def main():
video_path = "Videos/CatRun.mp4"
output_path = "Videos/VideoFlashWhite.mp4"
cap = cv2.VideoCapture(video_path)
# 获取视频信息
fps = cap.get(cv2.CAP_PROP_FPS)
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
# 定义视频编码器
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
# 创建 VideoWriter 对象
out = cv2.VideoWriter(output_path, fourcc, fps, (width, height))
frame_index = 0
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
# 闪白效果
frame = flash_white2(frame, frame_index)
out.write(frame)
frame_index += 1
cap.release()
out.release()
cv2.destroyAllWindows()
if __name__ == "__main__":
main()
四、注意事项
- 确保正确处理视频的每一帧,不要跳帧或漏帧。
- 选择合适的帧索引进行闪白处理,通常是在视频开始的前几帧和特定的时间点。
- 在处理视频时注意内存占用和运行时间,避免出现卡顿或内存溢出的情况。
- 根据需要调整闪白效果的强度和持续时间,以达到预期的视觉效果。
- 测试和调试代码,确保生成的视频满足预期的要求,并且没有出现问题。