赞
踩
目录
Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之十 简单视频浮雕画效果
Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。Python是一种解释型脚本语言,可以应用于以下领域: Web 和 Internet开发、科学计算和统计、人工智能、教育、桌面界面开发、软件开发、后端开发、网络爬虫。
这里使用 Python 基于 OpenCV 进行视觉图像处理,......
视频浮雕效果是一种图像处理技术,可以将图像中的灰度变化转换为浮雕或凸起的视觉效果。在视频中应用浮雕效果后,图像的边缘部分将产生明显的凸起或凹陷效果,从而使图像看起来更加立体和有质感。这种效果通常用于增强图像的纹理和轮廓,使图像看起来更加生动和逼真。
实现原理:
- 视频的浮雕效果,通过对视频的每一帧应用浮雕滤镜,增强视频的立体感和轮廓。
实现方法:
- 打开视频文件: 使用OpenCV的
VideoCapture
函数打开输入视频文件。- 设置输出视频参数: 获取输入视频的帧率和尺寸,并定义输出视频的编码器和帧率。
- 应用浮雕效果: 定义一个
apply_emboss_filter
函数,该函数接受一帧图像作为输入,并应用浮雕效果。浮雕效果的实现基于以下步骤:
- 将图像转换为灰度图像。
- 通过对灰度图像应用Sobel算子来计算图像的梯度。
- 根据Sobel算子计算的梯度,计算浮雕效果。
- 将浮雕效果转换回BGR格式。
- 处理视频帧: 逐帧读取输入视频,并对每帧应用浮雕效果。
- 写入输出视频: 将处理后的帧写入输出视频文件。
- 释放资源: 释放所有使用的资源,包括输入视频和输出视频。
1、编写代码
2、运行效果
3、具体代码
- """
- 简单视频浮雕画效果
- 1、打开视频文件:使用OpenCV的VideoCapture函数打开输入视频文件。
- 2、设置输出视频参数:获取输入视频的帧率和尺寸,并定义输出视频的编码器和帧率。
- 3、应用浮雕效果:定义一个apply_emboss_filter函数,该函数接受一帧图像作为输入,并应用浮雕效果。浮雕效果的实现基于以下步骤:
- 4、写入输出视频:将处理后的帧写入输出视频文件。
- 5、释放资源:释放所有使用的资源,包括输入视频和输出视频。
- """
-
-
- import cv2
-
-
- def apply_emboss_filter(frame, scale_factor=0.5, offset=128):
- """
- 应用浮雕滤波器
- :param frame:
- :param scale_factor:
- :param offset:
- :return:
- """
- # 将图像转换为灰度图像
- gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
-
- # 通过对灰度图像应用 Sobel 算子来计算图像的梯度
- sobel_x = cv2.Sobel(gray, cv2.CV_8U, 1, 0, ksize=3)
- sobel_y = cv2.Sobel(gray, cv2.CV_8U, 0, 1, ksize=3)
-
- # 计算浮雕效果
- emboss = cv2.addWeighted(sobel_x, scale_factor, sobel_y, scale_factor, offset)
-
- # 将浮雕效果转换回 BGR 格式
- emboss_bgr = cv2.cvtColor(emboss, cv2.COLOR_GRAY2BGR)
-
- return emboss_bgr
-
-
- def apply_emboss_effect(input_video_path, output_video_path, scale_factor=0.5, offset=128):
- """
- 应用浮雕效果到整个视频
- :param input_video_path:
- :param output_video_path:
- :param scale_factor:
- :param offset:
- :return:
- """
- # 打开视频文件
- cap = cv2.VideoCapture(input_video_path)
-
- # 检查视频是否成功打开
- if not cap.isOpened():
- print("Error: Failed to open video.")
- return
-
- # 获取视频的帧率和尺寸
- fps = int(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_video_path, fourcc, fps, (width, height))
-
- while cap.isOpened():
- # 读取视频的一帧
- ret, frame = cap.read()
- if not ret:
- break
-
- # 对当前帧应用浮雕滤波器
- embossed_frame = apply_emboss_filter(frame, scale_factor, offset)
-
- # 将处理后的帧写入输出视频文件
- out.write(embossed_frame)
-
- # 释放资源
- cap.release()
- out.release()
- cv2.destroyAllWindows()
-
-
- def main():
- # 调用函数并指定输入和输出视频文件路径
- input_video_path = "Videos/TwoPeopleRunning.mp4"
- output_video_path = "Videos/VideoEmbossEffect.mp4"
- apply_emboss_effect(input_video_path, output_video_path, scale_factor=0.5, offset=128)
-
-
- if __name__ == "__main__":
- main()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。