Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之九 简单视频卡通画效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之九 简单视频卡通画效果

目录

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之九 简单视频卡通画效果

一、简单介绍

二、简单视频卡通画效果实现原理

三、简单视频卡通画效果案例实现简单步骤

四、注意事项


一、简单介绍

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

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

二、简单视频卡通画效果实现原理

视频卡通画效果是一种图像处理技术,通过对视频进行处理,使其呈现出类似于卡通画风格的效果。这种效果通常会对视频中的图像进行简化和抽象化处理,使得图像更加平滑、颜色更加饱满,同时突出图像的轮廓和边缘,让整个画面看起来更加生动、有趣。

视频卡通画效果的主要特点包括:

  1. 简化和抽象化: 通过去除图像中的细节信息,简化图像的内容,使其更符合卡通画的风格。
  2. 颜色鲜艳: 增加图像的饱和度和对比度,使颜色更加鲜艳明亮。
  3. 轮廓突出: 通过增强图像的边缘和轮廓,使物体更加清晰和突出。
  4. 平滑过渡: 使图像的色彩过渡更加柔和,减少颜色的跳变,增加画面的连贯性。

实现视频卡通画效果的关键技术包括图像边缘检测、颜色增强、滤波处理等。通过这些处理手段,可以将原始视频转换为具有卡通画风格的效果。

卡通效果的实现原理如下:

  1. 灰度化:首先将彩色图像转换为灰度图像,以便进行边缘检测。

  2. 边缘检测:利用边缘检测算法(例如自适应阈值边缘检测)找到图像中的边缘部分,这些边缘部分将用于后续步骤。

  3. 颜色量化:对彩色图像进行颜色量化,使得图像中的颜色变得更加平滑。这一步通常使用双边滤波器来实现。

  4. 合并边缘和颜色图像:将边缘图像和颜色图像结合起来,只保留边缘部分对应的颜色。这样就得到了卡通效果的图像。

具体实现方法如下:

  • 使用OpenCV库提供的功能函数对图像进行处理,例如颜色转换、边缘检测、双边滤波等。

  • 对于边缘检测,可以选择不同的算法,例如自适应阈值边缘检测、Canny边缘检测等,根据实际效果选择合适的算法。

  • 在颜色量化过程中,可以调节滤波器的参数来控制图像的平滑程度,从而调节卡通效果的强度。

  • 最后,将边缘图像和颜色图像结合起来,只保留边缘部分对应的颜色,得到最终的卡通效果图像。

实现卡通效果涉及了以下关键函数:

  1. cv2.cvtColor()

    • 作用:用于图像颜色空间转换,将彩色图像转换为灰度图像。
    • 参数:包括输入图像和转换类型。
    • 示例:gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
  2. cv2.adaptiveThreshold()

    • 作用:自适应阈值边缘检测,根据图像局部特性自适应地选择阈值。
    • 参数:包括输入图像、输出图像、最大灰度值、阈值类型等。
    • 示例:edges = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 9, 2)
  3. cv2.bilateralFilter()

    • 作用:双边滤波器,同时考虑空间距离和像素值差异,可以保留图像的边缘信息。
    • 参数:输入图像、滤波器尺寸、颜色标准差和空间标准差等。
    • 示例:color_filtered = cv2.bilateralFilter(image, 9, 75, 75)
  4. cv2.bitwise_and()

    • 作用:对两个图像进行按位与操作,获取它们相交的部分。
    • 参数:输入两个图像。
    • 示例:cartoon = cv2.bitwise_and(color_filtered, color_filtered, mask=edges)

这些函数结合使用,实现了卡通效果的处理过程。首先将彩色图像转换为灰度图像,然后对灰度图像进行边缘检测,得到图像中的边缘部分。接着对彩色图像进行双边滤波处理,使得图像颜色更加平滑。最后将边缘图像和颜色图像结合起来,只保留边缘部分对应的颜色,得到最终的卡通效果图像。

三、简单视频卡通画效果案例实现简单步骤

1、编写代码

2、运行效果

3、具体代码

"""
简单视频卡通画效果1、灰度化:首先将彩色图像转换为灰度图像,以便进行边缘检测。2、边缘检测:利用边缘检测算法(例如自适应阈值边缘检测)找到图像中的边缘部分,这些边缘部分将用于后续步骤。3、颜色量化:对彩色图像进行颜色量化,使得图像中的颜色变得更加平滑。这一步通常使用双边滤波器来实现。4、合并边缘和颜色图像:将边缘图像和颜色图像结合起来,只保留边缘部分对应的颜色。这样就得到了卡通效果的图像。
"""import cv2def cartoonize(image, edge_threshold=9, color_reduction=300):"""图片卡通画效果:param image::param edge_threshold::param color_reduction::return:"""# 转换为灰度图像gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 边缘检测edges = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 9, edge_threshold)# 颜色量化color = cv2.bilateralFilter(image, 9, color_reduction, color_reduction)# 合并边缘和颜色图像cartoon = cv2.bitwise_and(color, color, mask=edges)return cartoondef main(input_video_path, output_video_path, edge_threshold=9, color_reduction=300):"""简单视频卡通画效果:param input_video_path::param output_video_path::param edge_threshold::param color_reduction::return:"""# 读取输入视频cap = cv2.VideoCapture(input_video_path)if not cap.isOpened():print("Error: Unable to open input video.")returnfps = 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')out = cv2.VideoWriter(output_video_path, fourcc, fps, (width, height))if not out.isOpened():print("Error: Unable to create output video.")return# 逐帧处理视频while True:ret, frame = cap.read()if not ret:break# 应用卡通画效果cartoon_frame = cartoonize(frame, edge_threshold, color_reduction)# 写入输出视频out.write(cartoon_frame)# 释放资源cap.release()out.release()cv2.destroyAllWindows()def main():# 调用函数并指定输入和输出视频文件路径input_video_path = "Videos/TwoPeopleRunning.mp4"output_video_path = "Videos/VideoCartoonEffect.mp4"main(input_video_path, output_video_path, edge_threshold=5, color_reduction=3000)if __name__ == "__main__":main()

四、注意事项

  1. 在处理视频时,需要逐帧处理每一帧图像,并将处理后的图像写入输出视频。

  2. 调节参数时要注意平衡效果和性能,过大的参数可能会导致处理时间过长,而过小的参数可能会导致效果不明显。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring.rabbitmq.listener.simple.default-requeue-rejected = false 和放入死信队列的区别

目录 一、场景 二、使用 spring.rabbitmq.listener.simple.default-requeue-rejected false 2.1 特点 三、 放入死信队列 四、两种区别 一、场景 当我们使用RabbitMq的时候,我们如果业务中有异常,很有可能造成死循环,因为 在RabbitMQ和…

【随笔】Git 高级篇 -- 纠缠不清的分支 rebase | cherry-pick(二十四)

💌 所属专栏:【Git】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! 💖 欢迎大…

2024考研调剂须知

----------------------------------------------------------------------------------------------------- 考研复试科研背景提升班 教你快速深入了解掌握考研复试面试中的常见问题以及注意事项,系统的教你如何在短期内快速提升自己的专业知识水平和编程以及英语…

Python+Django+Html网页版人脸识别考勤打卡系统

程序示例精选 PythonDjangoHtml人脸识别考勤打卡系统 如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助! 前言 这篇博客针对《PythonDjangoHtml网页版人脸识别考勤打卡系统》编写代码,代码整洁&#xf…

单链表总结提升

这篇博客讲解数据结构中的单链表,包括单链表的基础知识和我对链表实现的总结理解,希望可以帮助到正在学习的小伙伴,也希望得到小伙伴们的关注和支持哦~ 目录 1.单链表的概念 1.2顺序表和链表的对比 顺序表: 链表:…

Sketch3D:用于草图到3D生成的样式一致性指南

Sketch3D: Style-Consistent Guidance for Sketch-to-3D Generation Sketch3D:用于草图到3D生成的样式一致性指南 Wangguandong Zheng 重试 错误原因 Southeast UniversityChina 重试 错误原因 wgdzhengseu.edu.cnHaifeng Xia 重试 错误原因 Southeast Universit…

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

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

软考高级架构师:数据库模式概念和例题

一、AI 讲解 数据库模式分为三个层次&#xff1a;外模式、概念模式和内模式。这三个层次分别对应不同的抽象级别&#xff0c;帮助数据库管理员和用户以不同的视角理解数据库结构。 外模式&#xff08;用户级&#xff09;&#xff1a;是数据库用户的视图。每个用户可以通过外模…

最新Android Studio导入aar包的方法

以前的方式&#xff0c;目前看网上也大多数都是这种方式&#xff0c;导致我本地加的时候一直有问题 但是这样都无法sync以及编译通过&#xff0c;因为方式已经变了 1&#xff1a;将aar文件复制到MyApplication\app\libs下 2&#xff1a;在MyApplication\app\build.gradle下添加…

LeetCode-Java:6.Z字形变换

文章目录 题目解① 找规律 题目 将一个给定字符串 s 根据给定的行数 numRows &#xff0c;以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 "PAYPALISHIRING" 行数为 3 时&#xff0c;排列如下&#xff1a; P A H N A P L S I I G Y I R之后&a…

独家原创 | Matlab实现INFO-BiTCN-BiGRU-Attention多输入单输出回归预测

独家原创 | Matlab实现INFO-BiTCN-BiGRU-Attention多输入单输出回归预测 目录 独家原创 | Matlab实现INFO-BiTCN-BiGRU-Attention多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现INFO-BiTCN-BiGRU-Attention向量加权算法优化双向时间卷积…

【无人机/平衡车/机器人】详解STM32+MPU6050姿态解算—卡尔曼滤波+四元数法+互补滤波——附3个算法源码

效果&#xff1a; MPU6050姿态解算-卡尔曼滤波四元数互补滤波 目录 基础知识详解 欧拉角 加速度计(Accelerometer)与姿态测量 陀螺仪(Gyroscope)与姿态测量 姿态解算算法1-互补滤波 姿态解算算法2-四元数法 姿态解算算法3-卡尔曼滤波 组成 1.预测状态方程 2. 预测协方…

10:00面试,10:08就出来了,问的问题有点变态。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到8月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%…

浅谈网络安全威胁与防御策略

企业网络安全威胁概述 外部威胁&#xff1a;来自网络安全威胁&#xff0c;比如DDOS攻击&#xff0c;病毒&#xff0c;sql注入&#xff0c;木马&#xff0c;蠕虫&#xff0c;等网络入侵&#xff0c;网络扫描&#xff0c;垃圾邮件&#xff0c;钓鱼邮件&#xff0c;针对web的攻击…

计算机网络——NAT技术

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

科技论文和会议录制高质量Presentation Video视频方法

一、背景 机器人领域&#xff0c;许多高质量的期刊和会议&#xff08;如IEEE旗下的TRO&#xff0c;RAL&#xff0c;IROS&#xff0c;ICRA等&#xff09;在你的论文收录后&#xff0c;需要上传一个Presentation Video材料&#xff0c;且对设备兼容性和视频质量有较高要求&#…

Vue3基础语法

在这个章节中&#xff0c;简单的看下Vue3的基础语法&#xff0c;有了这些基础后&#xff0c;对写vue3单页也就没有什么问题了。 模板语法 在写html时&#xff0c;我们希望在某个节点绑定一个动态值时&#xff0c;是使用dom操作执行的&#xff0c;如下&#xff1a; <!DOCT…

Linux:动态库加载、编址

目录 一、库的概念 二、动静态库的加载 2.1绝对编址与相对编址 2.1一般程序的加载 三、动态库的加载 一、库的概念 库默认就是一个磁盘级文件&#xff0c;所以在执行代码时&#xff0c;库和可执行程序都会被加载到内存中&#xff0c;从原理上&#xff0c;库函数的调用依旧…

多态【C/C++复习版】

目录 一、多态是什么&#xff1f;如何实现&#xff1f; 二、 什么是重写&#xff1f;有什么特点&#xff1f; 三、什么是协变&#xff1f; 四、析构函数能实现多态吗&#xff1f;为什么要实现&#xff1f; 五、override和final的作用是什么&#xff1f; 六、 多态的原理是…

从 SQLite 3.4.2 迁移到 3.5.0(二十)

返回&#xff1a;SQLite—系列文章目录 上一篇:SQLite---调试提示&#xff08;十九&#xff09; 下一篇&#xff1a;SQLite—系列文章目录 ​ SQLite 版本 3.5.0 &#xff08;2007-09-04&#xff09; 引入了一个新的操作系统接口层&#xff0c; 与所有先前版本的 SQLi…