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

OpenCV--滤波器(一)

低通滤波器

  • 代码和笔记

代码和笔记

import cv2
import numpy as np"""
滤波器--用于图像处理的重要工具,它们可以根据图像中像素的邻域信息来修改像素值,以实现去噪、模糊、锐化、边缘检测等效果。低通滤波器(Low-pass Filter):
定义:允许低频信号通过,但减弱(或阻止)高频信号的滤波器。
原理:在频率域中,低通滤波器会移除高于某个截止频率(cut-off frequency)的所有频率分量。高通滤波器(High-pass Filter):
定义:允许高频信号通过,但减弱(或阻止)低频信号的滤波器。
原理:在频率域中,高通滤波器会移除低于某个截止频率的所有频率分量。
""""""
低通滤波器 平滑图像,去除图像中的高频噪声和细节
""""""
卷积操作
"""
img = cv2.imread('/img/cat.jpeg')
# 卷积核 必须是奇数,而且是float型  / 25相当于取了一个平均
# 根据卷积核的不同,可以进行锐化、轮廓等操作
kernel = np.ones((5, 5), np.float32) / 25# 卷积操作 -1位深 表示和原图一样
dst = cv2.filter2D(img, -1, kernel)cv2.imshow('img', img)"""
方盒滤波和均值滤波
作用:通过求取像素周围领域像素的平均值来平滑(使图像亮度平缓渐变,减小突变梯度,从而改善图像质量)图像
特点:算法简单,计算速度较快。然而,在去除噪声的同时,也会去除很多细节部分,导致图像变得模糊。
"""
# 方盒滤波
# 只需要设置卷积核大小 normalize=True(卷积核的系数a = 1/(W*H))等价于均值滤波, false时为a = 1
dst1 = cv2.boxFilter(img, -1, (5, 5), normalize=True)# 均值滤波
# 没有位深
dst2 = cv2.blur(img, (5, 5))"""
高斯波滤器
作用:通过高斯函数对像素邻域内的像素值进行加权平均,得到新的像素值。越在中间,比重占的越大。
特点:比均值滤波更平滑,边界保留更加好。能够有效地去除噪声,并保留图像中的细节部分。
"""
# (5, 5)卷积核的大小 X轴的标准差sigmaX, 越大平滑(模糊)越明显
dst3 = cv2.GaussianBlur(img, (5, 5), sigmaX=10)"""
中值滤波
作用:对像素邻域内的像素值进行排序,取中值作为该像素的新值。
特点:在边界保存方面好于均值滤波,特别适用于去除椒盐噪声。但在模板变大时,可能会存在一些边界的模糊。
"""
# 5卷积核的大小,这里要求是整数
dst4 = cv2.medianBlur(img, 5)"""
双边滤波器--美颜
作用:考虑像素的空间邻近度和像素值相似度的一种折中处理,同时达到保边去噪的目的。
特点:是一种非线性滤波,保留较多的高频信息,对低频滤波效果较好,但不能去除脉冲噪声。
"""
# 7 卷积核的大小
# sigmaColor 如果是黑白图片则为灰度距离,若是彩色图片则为颜色,sigmaSpace 空间距离,这两个值要根据实际情况调整
dst5 = cv2.bilateralFilter(img, 7, sigmaColor=20, sigmaSpace=50)cv2.waitKey(0)
cv2.destroyAllWindows()

相关文章:

  • Redis缓存的一些概念性问题
  • Milvus跨集群数据迁移
  • MySQL 保姆级教程(八):创建计算字段
  • 【Ubuntu通用压力测试】Ubuntu16.04 CPU压力测试
  • 传统后端SQL数据层替代解决方案: 内置数据源+JdbcTemplate+H2数据库 详解
  • YOLOv10改进 | Conv篇 |YOLOv10引入SPD-Conv卷积
  • 【前端技巧】css篇
  • React.ReactElement 与 React.ReactNode
  • Effective C++ 改善程序与设计的55个具体做法笔记与心得 3
  • SonarQube集成Jenkins平台搭建
  • 【Python】一文向您详细解析内置装饰器 @lru_cache
  • 【Android面试八股文】Kotlin内置标准函数let的原理是什么?
  • 初识C++ · 继承(1)
  • 乐鑫ESP32相关资料整理
  • 喜马拉雅项目调整
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • 2017年终总结、随想
  • 5、React组件事件详解
  • angular组件开发
  • exif信息对照
  • Git学习与使用心得(1)—— 初始化
  • isset在php5.6-和php7.0+的一些差异
  • Netty 4.1 源代码学习:线程模型
  • node-glob通配符
  • tweak 支持第三方库
  • 对JS继承的一点思考
  • - 概述 - 《设计模式(极简c++版)》
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 关于 Cirru Editor 存储格式
  • 回流、重绘及其优化
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 类orAPI - 收藏集 - 掘金
  • 离散点最小(凸)包围边界查找
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 前端存储 - localStorage
  • 我有几个粽子,和一个故事
  • 如何用纯 CSS 创作一个货车 loader
  • 移动端高清、多屏适配方案
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • # 利刃出鞘_Tomcat 核心原理解析(八)-- Tomcat 集群
  • ### RabbitMQ五种工作模式:
  • #### golang中【堆】的使用及底层 ####
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (done) 两个矩阵 “相似” 是什么意思?
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (力扣题库)跳跃游戏II(c++)
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (转)项目管理杂谈-我所期望的新人
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • .JPG图片,各种压缩率下的文件尺寸
  • .libPaths()设置包加载目录