当前位置: 首页 > news >正文

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

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

import cv2
import numpy as npclass 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.numself.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# 求平均值并转换为uint8self.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 threadingcap = cv2.VideoCapture(0)   # 连接到相机0ret, frame = cap.read()     # 读取相机数据if ret:filter_cam = FilterCamera(cap, frame, 5)   # 定义相机# 显示画面def show_frame():global timerframe = 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

效果对比:

未降噪

 降噪后

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 均值滤波算法及实现
  • Matlab演示三维坐标系旋转
  • Python基础语法篇(下)+ 数据可视化
  • 【Gin】精准应用:Gin框架中工厂模式的现代软件开发策略与实施技巧(上)
  • 前端表格解析方法
  • Python酷库之旅-第三方库Pandas(037)
  • 【iOS】内存对齐
  • Windows版MySQL5.7解压直用(如何卸载更换位置重新安装)
  • 六边形动态特效404单页HTML源码
  • C语言-网络编程-UDP通信创建流程
  • 大数据之数据抽取架构演变过程
  • 数据结构 —— B树
  • 【BUG】已解决:WslRegisterDistribution failed with error: 0x800701bc
  • Qt Style Sheets-使用样式表自定义 Qt 部件
  • Freedom of Choice
  • ----------
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • Android交互
  • conda常用的命令
  • Django 博客开发教程 8 - 博客文章详情页
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • go append函数以及写入
  • k8s 面向应用开发者的基础命令
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • Terraform入门 - 3. 变更基础设施
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 聊聊redis的数据结构的应用
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 人脸识别最新开发经验demo
  • 三分钟教你同步 Visual Studio Code 设置
  • 我从编程教室毕业
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 一个完整Java Web项目背后的密码
  • Linux权限管理(week1_day5)--技术流ken
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • #if #elif #endif
  • #pragma 指令
  • (35)远程识别(又称无人机识别)(二)
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (LLM) 很笨
  • (python)数据结构---字典
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (函数)颠倒字符串顺序(C语言)
  • (佳作)两轮平衡小车(原理图、PCB、程序源码、BOM等)
  • (原创)可支持最大高度的NestedScrollView
  • (转)http协议
  • (转)创业家杂志:UCWEB天使第一步
  • .gitignore文件_Git:.gitignore
  • .gitignore文件使用
  • .Net mvc总结
  • .NET 动态调用WebService + WSE + UsernameToken
  • .net 设置默认首页
  • .net通过类组装数据转换为json并且传递给对方接口