Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之八 简单视频素描效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之八 简单视频素描效果

目录

[Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之八 简单视频素描效果](#Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之八 简单视频素描效果)

一、简单介绍

二、简单指定视频某片段快放效果实现原理

三、简单指定视频某片段快放效果案例实现简单步骤

四、注意事项


一、简单介绍

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

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

二、简单指定视频某片段快放效果实现原理

视频素描效果是一种图像处理技术,它通过在视频中模拟铅笔素描的效果,使得视频看起来像是由铅笔勾勒出的线条和轮廓组成。这种效果常常用于艺术创作、视频编辑等领域,能够给视频带来独特的艺术感和视觉效果。

在视频素描效果中,通常会保留视频的主要轮廓和边缘线条,去除过多的细节和色彩,从而营造出一种简洁、抽象的画面风格。这种效果常常被用于制作动画、漫画、艺术短片等类型的视频,也可以作为一种艺术表现手段来增强视频的观赏性和艺术性。

当实现视频素描效果时,我们需要使用边缘检测算法来突出视频中的轮廓,并将其转换为黑白画面。以下是实现该效果的基本方法:

  1. 读取视频:首先,我们使用OpenCV库读取输入的视频文件。

  2. 处理每一帧:对于视频中的每一帧,我们都会应用素描画效果。我们使用边缘检测算法(如Canny边缘检测)来检测图像中的边缘,然后反转边缘图像,使其成为黑色背景上的白色轮廓。

  3. 保存视频:最后,我们将处理后的帧写入输出视频文件中,以创建包含素描效果的新视频。

三、简单指定视频某片段快放效果案例实现简单步骤

1、编写代码

2、运行效果

3、具体代码

python 复制代码
"""
简单视频素描效果
    1、读取视频:首先,我们使用OpenCV库读取输入的视频文件。
    2、处理每一帧:对于视频中的每一帧,我们都会应用素描画效果。
    我们使用边缘检测算法(如Canny边缘检测)来检测图像中的边缘,然后反转边缘图像,使其成为黑色背景上的白色轮廓。
    3、保存视频:最后,我们将处理后的帧写入输出视频文件中,以创建包含素描效果的新视频。
"""

import cv2


def sketch(frame, canny_threshold=150):
    """
    简单素描效果
    :param frame:帧,图
    :param canny_threshold:边缘因子,越大,细节越少
    :return:
    """
    # 将图像转换为灰度图
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    # 使用高斯模糊去除噪音
    blurred = cv2.GaussianBlur(gray, (5, 5), 0)
    # 检测边缘
    edges = cv2.Canny(blurred, canny_threshold, canny_threshold * 3)
    # 反色
    edges = 255 - edges
    return edges


def sketch_video(input_video_path, output_video_path, canny_threshold=150):
    """
    简单视频素描效果
    :param input_video_path:
    :param output_video_path:
    :param canny_threshold: 边缘因子,越大,细节越少
    :return:
    """
    # 校验视频路径
    if not isinstance(input_video_path, str) or not isinstance(output_video_path, str):
        raise ValueError("Input and output video paths must be strings.")
    # 读取原始视频
    cap = cv2.VideoCapture(input_video_path)
    if not cap.isOpened():
        raise ValueError("Error: Unable to open input video.")

    # 获取视频信息
    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))

    # 校验视频尺寸
    if width <= 0 or height <= 0:
        raise ValueError("Error: Invalid video dimensions.")

    # 定义视频编码器
    fourcc = cv2.VideoWriter_fourcc(*'mp4v')
    # 创建 VideoWriter 对象
    out = cv2.VideoWriter(output_video_path, fourcc, fps, (width, height), isColor=False)

    # 处理每一帧并保存视频
    while cap.isOpened():
        ret, frame = cap.read()
        if not ret:
            break

        # 应用素描画效果
        sketch_frame = sketch(frame, canny_threshold)

        # 写入视频帧
        out.write(sketch_frame)

    # 释放资源
    cap.release()
    out.release()
    cv2.destroyAllWindows()


def main():
    # 调用函数并指定输入和输出视频文件路径
    input_video_path = "Videos/CatRun.mp4"
    output_video_path = "Videos/VideoSketchEffect.mp4"
    sketch_video(input_video_path, output_video_path, canny_threshold=7)


if __name__ == "__main__":
    main()

四、注意事项

  • 参数校验:对输入的视频路径进行检查,确保路径有效,以及视频文件能够成功读取。

  • 处理单帧:对每一帧应用素描效果时,我们需要确保算法的效率,以避免处理时间过长导致视频播放不流畅。

  • 视频编解码器:选择合适的视频编解码器以确保输出视频文件的兼容性和质量。

  • 图像处理参数:调整边缘检测算法的参数,如Canny边缘检测的阈值,以获得最佳的素描效果。

相关推荐
前端玖耀里41 分钟前
如何使用python的boto库和SES发送电子邮件?
python
serve the people41 分钟前
python环境搭建 (十二) pydantic和pydantic-settings类型验证与解析
java·网络·python
小天源42 分钟前
Error 1053 Error 1067 服务“启动后立即停止” Java / Python 程序无法后台运行 windows nssm注册器下载与报错处理
开发语言·windows·python·nssm·error 1053·error 1067
喵手1 小时前
Python爬虫实战:HTTP缓存系统深度实战 — ETag、Last-Modified与requests-cache完全指南(附SQLite持久化存储)!
爬虫·python·爬虫实战·http缓存·etag·零基础python爬虫教学·requests-cache
喵手1 小时前
Python爬虫实战:容器化与定时调度实战 - Docker + Cron + 日志轮转 + 失败重试完整方案(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·容器化·零基础python爬虫教学·csv导出·定时调度
2601_949146532 小时前
Python语音通知接口接入教程:开发者快速集成AI语音API的脚本实现
人工智能·python·语音识别
寻梦csdn2 小时前
pycharm+miniconda兼容问题
ide·python·pycharm·conda
Java面试题总结3 小时前
基于 Java 的 PDF 文本水印实现方案(iText7 示例)
java·python·pdf
不懒不懒3 小时前
【决策树算法实战指南:从原理到Python实现】
python·决策树·id3·c4.5·catr
马猴烧酒.3 小时前
【面试八股|Java集合】Java集合常考面试题详解
java·开发语言·python·面试·八股