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、具体代码

"""
简单视频浮雕画效果
    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. 在处理视频时,要确保处理速度足够快,以避免处理过程变得过慢。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/536084.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

关于MCU产品开发参数存储的几种方案

关于MCU产品开发参数存储的几种方案 Chapter1 关于MCU产品开发参数存储的几种方案Chapter2 单片机参数处理[保存与读取]Chapter3 嵌入式设备参数存储技巧Chapter4 STM32硬件I2C的一点心得(AT24C32C和AT24C64C) Chapter1 关于MCU产品开发参数存储的几种方案 原文链接 在工作中…

Python 批量检测ip地址连通性,以json格式显示(支持传参单IP或者网段)

代码 ########################################################################## File Name: check_ip_test.py# Author: eight# Mail: 18847097110163.com # Created Time: Thu 11 Apr 2024 08:52:45 AM CST################################################…

突破界限 千视将在 NAB 2024 展会上展示领先的 AV over IP 技术

突破界限!千视将在 NAB 2024 展会上展示领先的 AV over IP技术 作为AV over IP领域的先驱者,Kiloview将于2024年4月14日至17日在NAB展会(展台号:SU6029)隆重登场,展示我们领先业界的AV over IP产品、解决方…

Windows下安装GPU版Pytorch

升级Driver到最新版本 Windows搜索栏中输入设备管理器找到显示适配器一项,点击展开,你将看到你的NVIDIA显卡列在其中右键点击你的NVIDIA显卡,选择更新驱动软件…。在弹出的对话框中,选择自动搜索更新的驱动软件。之后&#xff0c…

nginx反向代理conf

打开nginx配置。 对登录功能测试完毕后,接下来,我们思考一个问题:前端发送的请求,是如何请求到后端服务的? 前端请求地址:http://localhost/api/employee/login 后端接口地址:http://localho…

计算机网络——NAT技术

目录 前言 前篇 引言 SNAT(Source Network Address Translation)源网络地址转换 SNAT流程 确定性标记 DNAT(Destination Network Address Translation,目标网络地址转换) NAT技术重要性 前言 本博客是博主用于…

ShardingSphere再回首

概念: 连接:通过协议 方言及库存储的适配,连接数据和应用,关注多模数据苦之间的合作 增量:抓取库入口流量题提供重定向, 流量变形(加密脱敏)/鉴权/治理(熔断限流)/分析等 可插拔:微内核 DDL:cr…

ssm+vue的实验室课程管理系统(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频: ssmvue的实验室课程管理系统(有报告)。Javaee项目,ssm vue前后端分离项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构…

来补上LangChain的CookBook(二)

LangChain Experssion Language 简称LCEL,感觉就是为了节省代码量,让程序猿们更好地搭建基于大语言模型的应用,而在LangChain框架中整了新的语法来搭建promptLLM的chain。来,大家直接看官网链接:LangChain Expression …

pandas(day10)

一. 各各品类产品交易指数对比 获取文件名 files glob.glob("./*.xlsx")# 读取数据,并改列名,增加一列 品牌 dfs [] for f in files:t f[2:4]df pd.read_excel(f)df["品牌"] tif t "拜耳":df.rename(columns{"…

C语言读取 .ico 文件并显示数据

原来是想做光标编辑器&#xff0c;自己把绘图板的内容导出为光标格式 鼠标指针文件格式解析——Windows&#xff08;一&#xff09; (qq.com) 代码来源自 Icons | Microsoft Learn 鄙人又补充些变量可以运行微软的代码 简单代码如下 #include <stdio.h> #include &l…

uniapp 小程序获取WiFi列表

<template><view ><button click"getWifiList">获取WiFi列表</button><scroll-view:scroll-top"scrollTop"scroll-yclass"content-pop"><viewclass"itemInfo"v-for"(item, index) in wifiList&…

unity——Button组件单击双击长按功能

1.实现单击、双击、长按功能 using UnityEngine; using UnityEngine.Events; using UnityEngine.EventSystems; public class ButtonControl_Click_Press_Double : MonoBehaviour, IPointerClickHandler, IPointerDownHandler, IPointerUpHandler, IPointerExitHandler {publi…

debian安装和基本使用

debian安装和基本使用 文章目录 debian安装和基本使用1. 为什么选择debian2. 如何下载Debian2.1 小型安装镜像2.2 完整安装镜像 3. Debian操作系统安装3.1 创建Debian虚拟机3.2 安装操作系统 4. Debian系统的初始设置4.1 桌面环境的配置4.2 配置网络4.3 生效网络配置4.4 配置de…

第24次修改了可删除可持久保存的前端html备忘录:文本编辑框不再隐藏,又增加了哔哩哔哩搜索和必应搜索

第24次修改了可删除可持久保存的前端html备忘录:文本编辑框不再隐藏&#xff0c;又增加了哔哩哔哩搜索和必应搜索. <!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8"><meta name"viewport" content"…

Python学习之-matplotlib详解

前言&#xff1a; Matplotlib 是一个 Python 的图表绘制库&#xff0c;广泛用于生成各种静态、动态和交互式的图表。它能够创建线图、散点图、条形图、饼图、直方图、误差线图、箱型图、热图、子图网络、散点矩阵等图表。 安装 Matplotlib&#xff1a; pip install matplotli…

RocketMQ的docker安装和SpringBoot的集成

1.Docker安装 1.1创建docker-compose.yml文件 version: 3.5 services:rmqnamesrv:image: foxiswho/rocketmq:servercontainer_name: rmqnamesrvports:- 9876:9876networks:rmq:aliases:- rmqnamesrvrmqbroker:image: foxiswho/rocketmq:brokercontainer_name: rmqbrokerports…

docker完美安装分布式任务调度平台XXL-JOB

分布式任务调度平台XXL-JOB 1、官方文档 自己看 https://www.xuxueli.com/xxl-job/#1.1%20%E6%A6%82%E8%BF%B0 2、使用docker部署 本人使用的腾讯云&#xff0c;安装docker暴露一下端口&#xff0c;就很舒服的安装这个服务了。 docker pull xuxueli/xxl-job-admin:2.4.03…

ELFK的部署

目录 一、ELFK&#xff08;FilebeatELK&#xff09; 1. Filebeat的作用 2. ELFK工作流程 3. ELFK的部署 3.1 服务器配置 3.2 服务器环境 3.3 安装filebeat 3.4 修改filebeat主配置文件 3.5 在logstash组件所在节点&#xff08;apache节点&#xff09;上新建一个logstas…

关闭笔记本自带的键盘

目录 一、问题 二、方法 【方法一】 【方法二】 一、问题 笔记本自带的键盘上的个别按键又坏了&#xff0c;可能是因为使用电脑时&#xff0c;最先坏的几个按键那里温度比较高&#xff0c;久而久之就烧坏了吧。距离上次更换新键盘才差不多一年&#xff0c;所以不打算再买新…