Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之十 简单视频浮雕画效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之十 简单视频浮雕画效果

目录

[Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之十 简单视频浮雕画效果](#Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之十 简单视频浮雕画效果)

一、简单介绍

二、简单视频浮雕画效果实现原理

三、简单视频浮雕画效果案例实现简单步骤

四、注意事项


一、简单介绍

Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。Python是一种解释型脚本语言,可以应用于以下领域: Web 和 Internet开发、科学计算和统计、人工智能、教育、桌面界面开发、软件开发、后端开发、网络爬虫。

这里使用 Python 基于 OpenCV 进行视觉图像处理,......

二、简单视频浮雕画效果实现原理

视频浮雕效果是一种图像处理技术,可以将图像中的灰度变化转换为浮雕或凸起的视觉效果。在视频中应用浮雕效果后,图像的边缘部分将产生明显的凸起或凹陷效果,从而使图像看起来更加立体和有质感。这种效果通常用于增强图像的纹理和轮廓,使图像看起来更加生动和逼真。

实现原理:

  • 视频的浮雕效果,通过对视频的每一帧应用浮雕滤镜,增强视频的立体感和轮廓。

实现方法:

  1. 打开视频文件: 使用OpenCV的VideoCapture函数打开输入视频文件。
  2. 设置输出视频参数: 获取输入视频的帧率和尺寸,并定义输出视频的编码器和帧率。
  3. 应用浮雕效果: 定义一个apply_emboss_filter函数,该函数接受一帧图像作为输入,并应用浮雕效果。浮雕效果的实现基于以下步骤:
    • 将图像转换为灰度图像。
    • 通过对灰度图像应用Sobel算子来计算图像的梯度。
    • 根据Sobel算子计算的梯度,计算浮雕效果。
    • 将浮雕效果转换回BGR格式。
  4. 处理视频帧: 逐帧读取输入视频,并对每帧应用浮雕效果。
  5. 写入输出视频: 将处理后的帧写入输出视频文件。
  6. 释放资源: 释放所有使用的资源,包括输入视频和输出视频。

三、简单视频浮雕画效果案例实现简单步骤

1、编写代码

2、运行效果

3、具体代码

python 复制代码
"""
简单视频浮雕画效果
    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()

四、注意事项

  1. 确保输入视频文件存在且能够正常打开。
  2. 确保输入视频的帧率和尺寸与输出视频一致。
  3. 注意图像处理过程中可能产生的数据类型问题,如确保灰度图像的数据类型为CV_8U类型。
  4. 在处理视频时,要确保处理速度足够快,以避免处理过程变得过慢。
相关推荐
Q26433650232 小时前
【有源码】基于 Hadoop 生态的化妆品销售数据存储分析与可视化 面向化妆品行业的用户画像构建与销售机会识别研究
大数据·hadoop·python·机器学习·spark·毕业设计·课程设计
2601_962078198 小时前
Python中calendar.weekday用法
python·编程技巧·calendar·日期处理·weekday
2601_962218618 小时前
万象生鲜系统业财一体化底层打通技术自动生成经营账单
大数据·数据库·人工智能·python·算法
2601_966949658 小时前
为什么量化策略需要大量历史股票数据?从回测可信度理解数据规模
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
2601_962885728 小时前
如何用 Python 扫描 A 股跳空缺口并统计缺口回补概率?
java·前端·python
李高钢8 小时前
Python FastAPI 框架入门:从零搭建你的第一个高性能 API 服务
数据库·python·fastapi
ocean21039 小时前
2025-2026年Python面试高频知识点洞察
开发语言·python·面试·python八股文
Warson_L9 小时前
Python的OrderedDict
python
隐擎fox9 小时前
高性能网络爬虫架构设计:基于 Python 的长连接复用与分布式会话池调度实践
分布式·python·网络协议·tcp/ip·高并发·网络爬虫、
Warson_L9 小时前
Python的TypedDict
python·langchain·llm