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

OpenCV-Python实战(9)——滤波降噪

一、均值滤波器 cv2.blur()

img = cv2.blur(src=*,ksize=*,anchor=*,borderType=*)

img:目标图像。

src:原始图像。

ksize:滤波核大小,(width,height)。

anchor:滤波核锚点,默认为:(-1,-1)核的中心。

borderType:边界样式,一般填默认即可。

import cv2

lena = cv2.imread('Lena_D.png')[::2,::2,:]

img1 = cv2.blur(src=lena,ksize=(3,3))
img2 = cv2.blur(src=lena,ksize=(5,5))
img3 = cv2.blur(src=lena,ksize=(7,7))

cv2.imshow('lena',lena)
cv2.imshow('img1',img1)
cv2.imshow('img2',img2)
cv2.imshow('img3',img3)
cv2.waitKey(0)
cv2.destroyAllWindows()

二、方框滤波 cv2.boxFilter() 

img = cv2.boxFilter(src=*,ddepth=*,ksize=*,anchor=*,normalize=*,borderType=*)

ddepth:图像深度(channel 数),默认:-1,与原始图像深度相同。

normalize:是否归一化处理。1表示归一化; 0表示不归一化,将核内像素做 add 操作,像素最大值为255。

img:目标图像。

src:原始图像。

ksize:滤波核大小,(width,height)。

anchor:滤波核锚点,默认为:(-1,-1)核的中心。

borderType:边界样式,一般填默认即可。

import cv2

lena = cv2.imread('Lena_D.png')[::2,::2,:]

img1 = cv2.boxFilter(src=lena,ksize=(3,3),normalize=1)
img2 = cv2.boxFilter(src=lena,ksize=(3,3),normalize=0)

cv2.imshow('lena',lena)
cv2.imshow('img1',img1)
cv2.imshow('img2',img2)
cv2.waitKey(0)
cv2.destroyAllWindows()

三、中值滤波器 cv2.medianBlur() 

取滤波核内像素值排序的中间值。 

img = cv2.medianBlur(src=*,ksize=*)

img:目标图像。

src:原始图像。

ksize:滤波核边长,如:3、5、7等。

import cv2

lena = cv2.imread('Lena_D.png')[::2,::2,:]

img1 = cv2.medianBlur(src=lena,ksize=3)
img2 = cv2.medianBlur(src=lena,ksize=5)
img3 = cv2.medianBlur(src=lena,ksize=7)

cv2.imshow('lena',lena)
cv2.imshow('img1',img1)
cv2.imshow('img2',img2)
cv2.imshow('img2',img3)
cv2.waitKey(0)
cv2.destroyAllWindows()

四、高斯滤波器

 滤波核内的数值符合高斯分布。\frac{1}{2\pi \sigma ^{2}}\begin{bmatrix} exp(-\frac{1}{\sigma ^{2}}) &exp(-\frac{1}{2\sigma ^{2}}) &exp(-\frac{1}{\sigma ^{2}}) \\ exp(-\frac{1}{2\sigma ^{2}})&1 &exp(-\frac{1}{2\sigma ^{2}}) \\ exp(-\frac{1}{\sigma ^{2}})& exp(-\frac{1}{2\sigma ^{2}}) & exp(-\frac{1}{\sigma ^{2}}) \end{bmatrix}

img = cv2.GaussianBlur(src=*,ksize=*,sigmaX=*,sigmaY=*,borderType=*)

img:目标图像。

src:原始图像。

ksize:高斯滤波核大小,(width,height)必须为奇数。

sigmaX、sigmaY:水平与竖直方向的标准偏差。

borderType:边界样式,一般填默认即可。

import cv2

lena = cv2.imread('Lena_D.png')[::2,::2,:]

img1 = cv2.GaussianBlur(src=lena,ksize=(3,3),sigmaX=0,sigmaY=0)
img2 = cv2.GaussianBlur(src=lena,ksize=(5,5),sigmaX=0,sigmaY=0)
img3 = cv2.GaussianBlur(src=lena,ksize=(7,7),sigmaX=0,sigmaY=0)

cv2.imshow('lena',lena)
cv2.imshow('img1',img1)
cv2.imshow('img2',img2)
cv2.imshow('img3',img3)
cv2.waitKey(0)
cv2.destroyAllWindows()

五、自定义滤波核 cv2.filter2D() 

img = cv2.filter2D(src=*,ddepth=*,kernel=*,anchor=*,delta=*,borderType=*)

img:目标图像。

src:原始图像。

ddepth:目标图像深度,默认为:-1,与原始图像深度相同。

kernel:自定义滤波核,(width,height),Opencv 只提供了单通道矩阵。

delta:偏置项。默认为:0。

anchor:滤波核锚点,默认为:(-1,-1)核的中心。

borderType:边界样式,一般填默认即可。

import cv2
import numpy as np

lena = cv2.imread('Lena_D.png')[::2,::2,:]
# 可以自行定义更复杂的滤波核
kernel_3 = np.ones((3,3),np.float32)/(3*3)
img1 = cv2.filter2D(src=lena,ddepth=-1,kernel=kernel_3)
kernel_5 = np.ones((5,5),np.float32)/(5*5)
img2 = cv2.filter2D(src=lena,ddepth=-1,kernel=kernel_5)

cv2.imshow('lena',lena)
cv2.imshow('img1',img1)
cv2.imshow('img2',img2)

cv2.waitKey(0)
cv2.destroyAllWindows()


http://www.kler.cn/a/463046.html

相关文章:

  • scrapy 教程
  • 吐卡机开发——指令合集—未来之窗行业应用跨平台架构
  • uboot ,s5pv210 ,bootm分析
  • 【图像处理】OpenCv + Python 实现 Photoshop 中的色彩平衡功能
  • 【AI大模型】深入GPT-2模型细节:揭秘其卓越性能的秘密
  • 【51项目】51单片机自制小霸王游戏机
  • C++“STL之String”
  • 说说缓存使用的具体场景都有哪些?缓存和数据库一致性问题该如何解决?缓存使用常见问题有哪些?
  • 融合表面信息和等变扩散的分子对接模型 SurfDock - 评测
  • Git的使用流程(详细教程)
  • NFT Insider #162:Cool Cats和Doodles或将推出代币
  • 线性表的三种常见查找算法(顺序查找、折半查找、分块查找)及算法分析
  • 无人机巡检在光伏电站中的应用优势
  • HarmonyOS NEXT版本Stage应用开发模型介绍(附视频讲解)
  • SWM221系列芯片之电机应用及控制
  • git的全通路线介绍
  • Mono里运行C#脚本19—get_runtime_by_version
  • stipple函数的坑......matlab绘制显著点
  • 【手搓一个脚本语言】六、用C语言抽象语法树AST计算表达式的值
  • 机加工行业制造执行MES系统-打造智能MES系统解决方案
  • 使用 Navicat 官方免费版来实现从 DAT 文件填充 MySQL 8 表
  • css3实现文字下滑波浪线
  • 不使用 el-popover 组件手动创建一个 div 作为 Popover
  • Serverless架构的搭建
  • FastExcel:超越EasyExcel的新一代Excel处理工具
  • Docker 安装与常用命令