使用cv2对视频指定区域进行去噪
视频去噪其实和图象一样,只是需要现将视频截成图片,在对图片进行去噪,将去噪的图片在合成视频就行。可以利用cv2.imread()、imwrite()等轻松实现。
去噪步骤
1、视频逐帧读成图片
2、图片指定区域批量去噪
2、去噪后的图片写入视频
1、视频逐帧读成图片
有两种方法,第一种是直接将图片读入内存,图片就是以numpy格式存在内存中,优点是可以极快的增加图片的读取速度,但过长的视频可能会导致内存爆满。第二种是逐帧将图片读到本地文件夹,以png的格式存到指定路径中,优点是不占用内存,但是由于加入了cv2.imwrite(),会耗费一定的时间。由于我这次不在服务器上跑,所以选择第二种方法。
def make_frame_img(video_path, output_path):"""从视频文件中抽取帧数图片,保存到指定路径参数:video_path: 输入视频路径output_path: 保存帧图片文件夹return 无"""# 读取视频文件cap = cv2.VideoCapture(video_path)# 检查视频是否成功打开if not cap.isOpened():print("无法打开视频文件:", video_path)return# 获取视频帧率和总帧数fps = cap.get(cv2.CAP_PROP_FPS)total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))# 如果没有创建输出文件夹,则创建输出文件夹if not os.path.exists(output_path):os.makedirs(output_path)# 分割视频为照片print("beginning to extract frames from video !")for i in tqdm(range(total_frames)):ret, frame = cap.read()if ret:# 保存照片filename = f'./frame_%04d.png' % ifilepath = os.path.join(output_path, filename)cv2.imwrite(filepath, frame)else:break
2、图片指定区域批量去噪
可以参考我写的上篇博客,图象去噪。但是上篇博客只是对单个图片全图去噪,这次我们需要的是对一个文件夹里的图片指定区域进行批量去噪。
2.1、图象指定区域去噪
本次的任务是对图象下半部分进行中值滤波,故只需将原图裁剪一般得到下张图,对下半张图进行滤波后,与未滤波的上半张图像进行拼接,可使用纵向堆叠的np.vstack()实现图象上下拼接。
def mid_move_noise(noise_image): # 对图像下半部分进行中值去噪image = cv2.imread(noise_image)h, w = image.shape[:2]half_height = h // 2bottom_half = image[half_height:, :]bottom_half = cv2.medianBlur(bottom_half, 9)image = np.vstack((image[:half_height, :], bottom_half))return image
2.2、写一个for 循环遍历文件夹中的图片进行图像指定区域去噪,将去噪后的图片写入到指定文件夹下。
def from_fold_process_images(source_folder, result_folder):print("image process from folder: " + source_folder)for img_name in tqdm(os.listdir(source_folder)):img_path = os.path.join(source_folder, img_name)if img_name.endswith('.png'):# 构建输出图片的路径output_path = os.path.join(result_folder, img_name)# 应用中值滤波并保存img = mid_move_noise(img_path)cv2.imwrite(output_path, img)
3、去噪图片写入成视频
def merge_to_video(img_path, output_video_path):print("image merge to video")"""将图片合成视频参数:img_path 输入图片路径output_video_path 输出视频路径return 无"""# 传入输入路径中的所有图像image_files = [f for f in os.listdir(img_path) if f.endswith(".png")]image_files.sort()# 获取图像尺寸img = cv2.imread(os.path.join(img_path, image_files[0]))height, width, _ = img.shape# 创建用于写入视频的VideoWriter对象video_writer = cv2.VideoWriter(output_video_path, cv2.VideoWriter_fourcc(*"mp4v"), 30, (width, height))# 逐个读取图像并将其写入视频for image_file in tqdm(image_files):img = cv2.imread(os.path.join(img_path, image_file))video_writer.write(img)print("Video has been created successfully!")video_writer.release()
测试代码:
make_frame_img('./noise.mp4', './video_fps')
from_fold_process_images('./video_fps', './move_noise_fps')
merge_to_video('./move_noise_fps', './denoise.mp4')
相关文章:
使用cv2对视频指定区域进行去噪
视频去噪其实和图象一样,只是需要现将视频截成图片,在对图片进行去噪,将去噪的图片在合成视频就行。可以利用cv2.imread()、imwrite()等轻松实现。 去噪步骤 1、视频逐帧读成图片 2、图片指定区域批量去噪 2、去噪后的图片写入视频 1、视频逐…...
AI在创造还是毁掉音乐?
AI对音乐产业的影响是复杂而多维的,既有创造性的贡献也存在潜在的挑战。我们可以从以下几个角度来分析这个问题: ### 创造性贡献 1. **音乐创作**:AI可以帮助音乐家创作新的旋律和和声,甚至生成完整的音乐作品。例如,…...
【2023年全国青少年信息素养大赛智能算法挑战赛复赛真题卷】
目录 2023全国青少年信息素养大赛智能算法挑战赛初中组复赛真题 2023全国⻘少年信息素养⼤赛智能算法挑战复赛⼩学组真题 2023全国青少年信息素养大赛智能算法挑战赛初中组复赛真题 1. 修复机器人的对话词库错误 【题目描述】 基于人工智能技术的智能陪伴机器人的语言词库被…...
Android系统揭秘(一)-Activity启动流程(上)
public ActivityResult execStartActivity( Context who, IBinder contextThread, IBinder token, Activity target, Intent intent, int requestCode, Bundle options) { IApplicationThread whoThread (IApplicationThread) contextThread; … try { … int result …...
使用Java实现哈夫曼编码
前言 哈夫曼编码是一种经典的无损数据压缩算法,它通过赋予出现频率较高的字符较短的编码,出现频率较低的字符较长的编码,从而实现压缩效果。这篇博客将详细讲解如何使用Java实现哈夫曼编码,包括哈夫曼编码的原理、具体实现步骤以…...
IDEA、PyCharm等基于IntelliJ平台的IDE汉化方式
PyCharm 或者 IDEA 等编辑器是比较常用的,默认是英文界面,有些同学用着不方便,想要汉化版本的,但官方没有这个设置项,不过可以通过插件的方式进行设置。 方式1:插件安装 1、打开设置 File->Settings&a…...
visual studio 创建c++项目
目录 环境准备:安装 visual studiovisual studio 创建c项目Tips:新建cpp文件注释与取消注释代码 其他初学者使用Visual Studio开发C和C时常遇到的3个坑 环境准备:安装 visual studio 官网:https://visualstudio.microsoft.com/zh…...
MGV电源维修KUKA机器人电源模块PH2003-4840
MGV电源维修 库卡电源模块维修 机器人电源模块维修 库卡控制器维修 KUKA电源维修 库卡机器人KUKA主机维修 KUKA驱动器模块维修 机械行业维修:西门子系统、法那克系统、沙迪克、FIDIA、天田、阿玛达、友嘉、大宇系统;数控冲床、剪板机、折弯机等品牌数控…...
设置浏览器互不干扰
目录 一、查看浏览器文件路径 二、 其他盘新建文件夹Cache 三、以管理员运行CMD 四、执行命令 一、查看浏览器文件路径 chrome://version/ 二、 其他盘新建文件夹Cache D:\chrome\Cache 三、以管理员运行CMD 四、执行命令 Mklink /d "C:\Users\Lenovo\AppData\Loca…...
kafka操作命令详解
目录 1、集群运维命令 1.1、集群启停命令 1.3、集群迁移命令 1.4、权限管理命令 1.4.1、权限参数介绍 1.4.2、增加权限命令 1.4.3、移出权限命令 1.4.4、查看所有topic权限命令 1.4.5、查看某个topic权限命令 2、生产者命令 2.1、创建topic命令 2.2、删除topic命令 …...
graalvm jdk和openjdk
下载地址:https://github.com/graalvm/graalvm-ce-builds/releases 官网: https://www.graalvm.org...
docker基础使用教程
1.准备工作 例子:工程在docker_test 生成requirements.txt文件命令:(使用参考链接2) pip list --formatfreeze > requirements.txt 参考链接1: 安装pipreqs可能比较困难 python 项目自动生成环境配置文件require…...
计算机网络 交换机的安全配置
一、理论知识 1.交换机端口安全功能介绍 交换机端口安全功能是针对交换机端口进行安全属性的配置,以控制用户的安全接入。主要包括以下两种配置项: ①限制交换机端口的最大连接数:控制交换机端口连接的主机数量;防止用户进行恶…...
深入解析大语言模型系列:Transformer架构的原理与应用
引言 在自然语言处理(NLP)领域,大语言模型(Large Language Models, LLMs)近几年取得了突破性的进展,而 Transformer 作为这些模型的核心架构,功不可没。本文将详细介绍 Transformer 的原理、结…...
uni-app地图组件控制
uni.createMapContext(mapId,this) 创建并返回 map 上下文 mapContext 对象。在自定义组件下,第二个参数传入组件实例this,以操作组件内 <map> 组件。 注意:uni.createMapContext(mapId, this) app-nvue 平台 2.2.5 支持 uni.create…...
前端调用api发请求常用的请求头content- type的类型和常用场景
Content-Type 是一个非常重要的HTTP头,它定义了发送给服务器或客户端的数据的MIME类型。这对于服务器和客户端正确解析和处理数据至关重要。下面是一些常见的 Content-Type 值及其用途和区别。 常见的 Content-Type 值 text/plain • 用途: 纯文本,无格…...
数据仓库之SparkSQL
Apache Spark SQL是Spark中的一个组件,专门用于结构化数据处理。它提供了通过SQL和DataFrame API来执行结构化数据查询的功能。以下是对Spark SQL的详细介绍: 核心概念 DataFrame: 定义: DataFrame是一个分布式数据集合,类似于关系型数据库中…...
如何在 MySQL 中导入和导出数据库以及重置 root 密码
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 如何导入和导出数据库 导出 要导出数据库,打开终端,确保你没有登录到 MySQL 中,然后输入以下命令&…...
基于uni-app和图鸟UI的云课堂小程序开发实践
摘要: 随着移动互联网的快速发展,移动学习已成为教育领域的重要趋势。本文介绍了基于uni-app和图鸟UI框架开发的云课堂小程序,该小程序实现了移动教学、移动学习、移动阅读和移动社交的完美结合,为用户提供了一个便捷、高效的学习…...
解决python从TD数据库取50w以上大量数据慢的问题
1.问题背景描述 python项目中的时序数据都存放在TD数据库中,数据是秒级存入的,当查询一周数据时将超过50w数据量,这是一次性获取全量数据到python程序很慢,全流程10秒以上,希望进行优化加速 2.排查 首先,…...
游戏心理学Day21
玩家情绪与暴力攻击 情绪 情绪的分类 情绪是一种经常波动的东西,我们既体验过骄傲激动和开心,也体验过羞怯内疚和沮丧。我们的感受高度依赖于情境。研究者区分出至少三种途径来考察作为一种相对固定的人格特征的情绪,即为情感性࿰…...
接口测试基础 --- 什么是接口测试及其测试流程?
接口测试是软件测试中的一个重要部分,它主要用于验证和评估不同软件组件之间的通信和交互。接口测试的目标是确保不同的系统、模块或组件能够相互连接并正常工作。 接口测试流程可以分为以下几个步骤: 1.需求分析:首先,需要仔细…...
贪心+动归1
跳跃游戏 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标,如果可以,返回 true ;否则࿰…...
三星S20以上手机中的动态相片及其分解
三星S20以后的相机,相机拍出来的图片,用三星手机自带的“相册”打开之后,还会有“查看动态照片”的选项,点击之后就能查看拍照片时前后2秒左右的视频! 不知道这个功能是不是三星独有的。 这样得到的图片非常大。因为…...
一文了解HarmonyOSNEXT发布重点内容
华为在2024年6月21日的开发者大会上正式发布了HarmonyOS NEXT版,这是华为在操作系统领域的一次重大飞跃,标志着华为在构建全场景智能生态方面的卓越成就。HarmonyOS NEXT版不仅带来了全新的系统架构和性能提升,还首次将AI能力融入系统&#x…...
矩阵中严格递增的单元格数
题目链接:leetcode:矩阵中严格递增的单元格数 描述 给你一个下标从 1 开始、大小为 m x n 的整数矩阵 mat,你可以选择任一单元格作为 起始单元格 。 从起始单元格出发,你可以移动到 同一行或同一列 中的任何其他单元格,但前提是目…...
超参数调优-通用深度学习篇(上)
文章目录 深度学习超参数调优网格搜索示例一:网格搜索回归模型超参数示例二:Keras网格搜索 随机搜索贝叶斯搜索 超参数调优框架Optuna深度学习超参数优化框架nvidia nemo大模型超参数优化框架 参数调整理论: 黑盒优化:超参数优化…...
小程序中data-xx是用方式
data-sts"3" 是微信小程序中的一种数据绑定语法,用于在 WXML(小程序模板)中将自定义的数据绑定到页面元素上。让我详细解释一下: data-xx 的作用: data-xx 允许你在页面元素上自定义属性,以便在事…...
【2024德国工作】外国人在德国找工作是什么体验?
挺难的,德语应该是所有中国人的难点。大部分中国人进德国公司要么是做中国业务相关,要么是做技术领域的工程师。先讲讲人在中国怎么找德国的工作,顺便延申下,德国工作的真实体验,最后聊聊在今年的德国工作签证申请条件…...
Unity中获取数据的方法
Input和GetComponent 一、Input 1、Input类: 用于处理用户输入(如键盘、鼠标、触摸等)的静态类 2、作用: 允许你检查用户的输入状态。如某个键是否被按下,鼠标的位置,触摸的坐标等 3、实例 (1) 键盘…...
类似wordpress的建站/网站建设的重要性
【问题描述】 楼梯有n阶台阶,上楼可以一步上1阶,2阶或3阶,编程计算共有多少种不同的走法?【算法分析】 此问题是“计数型”问题,适用于利用动态规划方法解决。利用“最后一步法”求解的分析步骤如下:1.确定…...
做优化的网站必须独立IP吗/友链价格
键字:《JAVA基础》 自学笔记序时令已经过了白露,转眼就快到了中秋佳节,天天渐渐变凉,一派秋天肃杀的景象。2020年注定是一个不平凡的一年。新型肺炎带来的影响还在持续。生活和经济都蒙上了一些不确定的薄薄的灰色。最近疫情期&am…...
提高网站排名/国内比百度好的搜索引擎
文章目录一、Python简介1.Python定义2.Python特点3.Python编译和运行过程4.Python的应用场景二、下载安装1.Windows2.Linux三、语法介绍1.代码缩进2.函数六、网络爬虫七、桌面应用开发一、Python简介 1.Python定义 Python是一种简单易学并且结合了解释性、编译性、互动性和面…...
企业微信下载/seo综合查询站长工具怎么用
整数转换英文表示273.整数转换英文表示题目描述思路:模拟273.整数转换英文表示 题目描述 整数转换英文表示 思路:模拟 使用百、十、二十以内组合小于1000的数,大于1000的数以3个3个为一节进行递归处理。 class Solution:def numberToWor…...
轻量级服务器wordpress/教育培训网站模板
1 问题定位 windows下面无问题,在linux下面出现问题,中文变成方框,经过排查发现linux下缺少字体,只需将widows字体上传到linux服务器进行配置加载就好 2 解决方案 2.1 方案一 2.1.1 安装字体库 [rootlocalhost ~]# yum -y inst…...
aws wordpress 路径/旺道智能seo系统
首先是噪声的大体分类:噪点噪声:又称脉冲噪声、椒盐噪声雪花噪声:又称高斯噪声条纹噪声:分析完这些噪声的大致分布情况之后importcv2from PIL importImagefrom PIL importImageChopsimportnumpy as npimporttimeimportpytesseract…...