opencv,连续拍摄多张图像求平均值减少噪点

news2024/11/15 7:00:39

        对于照度低或者相机质量差造成的密集的随机小噪点,可以通过拍摄多张图像求平均值的方法来减少噪点,获得较为清晰的画面。

import cv2
import numpy as np


class FilterCamera:
    def __init__(self, cap, in_frame, num):
        self.cap = cap  # 定义的相机

        self.num = num   # 求平均值的帧数
        frame_float = in_frame.astype(float)
        self.frames = [frame_float] * self.num
        self.sum_frame = sum(self.frames)
        self.filtered_frame = self.sum_frame / self.num  # 平均后的图像

    # 输出画面
    def frame_out(self):
        # 从相机获取图像
        r, f = self.cap.read()
        if r:
            frame_float = f.astype(float)   # 转为浮点数,防溢出
            # pop操作
            self.sum_frame -= self.frames[0]
            self.sum_frame += frame_float
            # 求平均值并转换为uint8
            self.filtered_frame = (self.sum_frame / self.num).astype(np.uint8)
            self.frames = self.frames[1:] + [frame_float]
            return self.filtered_frame
            # cv2.imshow('Average Frame', self.average_frame)

    # 释放相机资源
    def release(self):
        self.cap.release()


# #############################主程序###################################
if __name__ == '__main__':
    import threading

    cap = cv2.VideoCapture(0)   # 连接到相机0
    ret, frame = cap.read()     # 读取相机数据
    if ret:
        filter_cam = FilterCamera(cap, frame, 5)   # 定义相机

        # 显示画面
        def show_frame():
            global timer
            frame = filter_cam.frame_out()   # 获取帧
            cv2.imshow('Video Frame', frame)  # 显示帧
            # 帧定时器
            timer = threading.Timer(0.05, show_frame)
            timer.start()

        show_frame()

        # 进程守护循环
        while True:
            if cv2.waitKey(1) & 0xFF == ord('q'):
                timer.cancel()   # 取消定时器
                filter_cam.release()   # 释放相机资源
                cv2.destroyAllWindows()   # 销毁窗口
                break

效果对比:

未降噪

 降噪后

与高斯滤波的效果相比,这种方法在降噪的同时不会使画面模糊,甚至更锐利。缺点是降低了帧率,比较适合对帧率要求不高的场合。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

n6.Nginx 压缩功能

Nginx 压缩功能 Nginx支持对指定类型的文件进行压缩然后再传输给客户端,而且压缩还可以设置压缩比例,压缩后的 文件大小将比源文件显著变小,这样有助于降低出口带宽的利用率,降低企业的IT支出,不过会占用相 应的CPU资…

科普文:后端性能优化的实战小结

一、背景与效果 ICBU的核心沟通场景有了10年的“积累”,核心场景的界面响应耗时被拉的越来越长,也让性能优化工作提上了日程,先说结论,经过这一波前后端齐心协力的优化努力,两个核心界面90分位的数据,FCP平…

PDF编辑器的秘密:解锁文档处理的无限可能

PDF这个文件因其跨平台兼容性、保持文档格式不变以及易于传输的特性,成为了工作、学习及日常生活中不可或缺的一部分。但是PDF编辑器可不多,我这次就介绍下我用过好用的PDF编辑器吧。 1福昕PDF编辑器 这个软件功能全面,所以软件本身的安装包…

服务攻防-中间件安全(漏洞复现)

一.中间件-IIS-短文件&解析&蓝屏 IIS现在用的也少了,漏洞也基本没啥用 1、短文件:信息收集 2、文件解析:还有点用 3、HTTP.SYS:蓝屏崩溃 没有和权限挂钩 4、CVE-2017-7269 条件过老 windows 2003上面的漏洞 二.中…

游戏常用运行库安装包 Game Runtime Libraries Package

游戏常用运行库安装包(Game Runtime Libraries Package)是一个整合了多种游戏所需运行库的安装程序,旨在帮助玩家和开发者解决游戏无法正常运行的问题。该安装包支持从Windows XP到Windows 11的系统,并且具备自动检测系统并推荐合…

threejs零基础搭建3D可视化汽车展厅

前置知识(最下面有完整代码) 每个代码都有注释,零基础也能看懂 中文官方文档教程 创建项目 创建空文件夹 执行如下命令初始化package.json文件 npm init -y安装threejs包 yarn add three安装tween.js动画库,用于做动画 tweenjs文档 yarn add @tweenjs/tween.js安装gui调…

问题解决实录 | Anaconda | Anaconda Navigator 启动无反应

问题解决实录 | Anaconda | Anaconda Navigator 启动无反应 以管理员身份运行 Anaconda Prompt conda update -n root conda conda update --all如果执行完以上步骤 碰到 AttributeError: module ‘pkgutil’ has no attribute ‘ImpImporter’. Did you mean: ‘zipimporter…

python3.10.4——CentOS7安装步骤

目录 1.CentOS7中默认有python2.7.5 2.安装前置依赖程序 3.在python官网下载linux系统安装包 4.解析、编译安装python3.10.4 5.创建软链接 6.修改yum相关配置 7.重新检查python版本号 1.CentOS7中默认有python2.7.5 2.安装前置依赖程序 yum install wget zlib-devel bz…

因果推断 | 双重机器学习(DML)算法原理和实例应用

文章目录 1 引言2 DML算法原理2.1 问题阐述2.2 DML算法 3 DML代码实现3.1 策略变量为0/1变量3.2 策略变量为连续变量 4 总结5 相关阅读 1 引言 小伙伴们,好久不见呀。 距离上次更新已经过去了一个半月,上次发文章时还信誓旦旦地表达自己后续目标是3周更…

HOST处理器访问PCI设备

HOST处理器对PCI设备的数据访问主要包含两方面内容,一方面是处理器向PCI设备发起存储器和I/O读写请求;另一方面是处理器对PCI设备进行配置读写。 在PCI设备的配置空间中,共有6个BAR寄存器。每一个BAR寄存器都与PCI设备使用的一组PCI总线地址…

RK3568笔记四十一:DHT11驱动开发测试

若该文为原创文章,转载请注明原文出处。 记录开发单总线,读取DHT11温湿度 一、DHT11介绍 DHT11是串行接口(单线双向)DATA 用于微处理器与 DHT11之间的通讯和同步,采用单总线数据格式,一次通讯时间4ms左右…

无刷电机控制之——帕克变换

前言 克拉克逆变换请参考如下链接 等幅值变换与克拉克逆变换 一、FOC算法流程图 二、帕克变换概念 1、我们需要知道二维坐标系中的I α \alpha α和I β \beta β,这两个变量的变化规律,通俗来讲就是要知道这两个变量是谁输入的、谁控制的&#xff0c…

pytorch学习(十六)conda和pytorch的安装

1.安装anaconda 1.1 首先下载安装包 1)进入anaconda官网 Anaconda | The Operating System for AI 2)注册一下 3)下载 4)一直点直到安装完 5)配置环境变量 在path路径中加入 Anaconda安装路径 Anaconda安装路径\S…

Redis高级篇—分布式缓存

目录 Redis持久化 RDB持久化 AOF持久化 RDB与AOF对比 Redis主从 全量同步 增量同步 Redis哨兵 RedisTemplate集成哨兵实现 Redis分片集群 散列插槽 集群伸缩 故障转移 自动故障转移 手动故障转移 RedisTemplate访问分片集群 Redis持久化 RDB持久化 RDB全称Re…

zabbix监控Windows机器进程数量

zabbix监控Windows机器进程数量 文章目录 zabbix监控Windows机器进程数量背景前提条件目的实施 背景 一个windows上的进程总是崩溃,总会出现进程不存在的情况,不能实时去服务器上检查,自己不勤快就要动脑子,让自己变的更懒&#…

Java语言程序设计基础篇_编程练习题*15.9 (使用箭头键画线)

*15.9 (使用箭头键画线) 请编写一个程序,使用箭头键绘制线段。所画的线从面板的中心开始,当敲 击向右、向上、向左或向下的箭头键时,相应地向东、向北、向西或向南方向画线,如图 15-26b所示 代码展示:编程练习题15_9D…

汽车电动空调系统

1.电动空调系统概述 电动汽车制冷空调系统与传统汽车制冷空调系统基本原理一样,区别在于电动汽车空调系统采用电动空调压缩机。电动空调压缩机由驱动电机,压缩机,控制器集成。 电动空调压缩机的驱动电机采用体积小,质量轻&#x…

【线性表】:顺序表里一些主要功能的实现

框架 线性表 是 n 个具有相同特征的数据元素的有限序列 常见的线性表:顺序表、链表、栈、队列… 线性表在逻辑上是线性结构,也就是连续的一条直线 但在物理结构上不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式…

数据结构(栈及其实现)

栈 概念与结构 栈:⼀种特殊的线性表,其只允许在固定的⼀端进⾏插⼊和删除元素操作。 进⾏数据插⼊和删除操作的⼀端称为栈顶,另⼀端称为栈底。栈中的数据元素遵守后进先出 LIFO(Last In First Out)的原则。 压栈&…

Windows版MySQL5.7解压直用(如何卸载更换位置重新安装)

文章目录 停止mysql进程及服务迁移整个mysql文件夹删除data重启计算机重新安装 停止mysql进程及服务 net stop mysql mysqld -remove mysql迁移整个mysql文件夹 删除data 重启计算机 shutdown -r -t 0重新安装 https://blog.csdn.net/xzzteach/article/details/137723185