初学opencv/滤波器

这篇博客介绍了OpenCV中的三种滤波器:均值滤波、高斯滤波和中值滤波。均值滤波是计算模板覆盖区域内像素的平均值;高斯滤波则使用高斯权重计算像素值,滤波器大小通常为奇数,系数可调;中值滤波是取模板区域内像素值的中位数,同样适用于模板大小为奇数的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

均值滤波:src输入图像,size为均值滤波器模板大小。以原图对应像素为中心的与模板中心重叠,将模板覆盖领域内全部像素求均值就是滤波后像素的值了。

高斯滤波:src输入图像,Ksize为高斯滤波器模板大小,sigmaX和sigmaY分别为高斯滤波在横线和竖向的滤波系数,第一点就是ksize的宽和高必须是奇数,一般在二维图像处理中,sigmaX和sigmaY取相等

中值滤波:src输入图像。ksize为均值滤波器模板大小,因为模板为正方形,所以只有一个参数.以原图对应像素为中心的与模板中心重叠,将模板覆盖领域内全部像素排序后的中间值就是滤波后像素的值了,所以模板长度必须为奇数

#coding:utf-8
"""
opencv滤波器
"""
import cv2
import numpy as np
import matplotlib.pyplot as plt

img = cv2.imread('images/white.jpg',0)
#cv2.blur低通滤波器的目标是降低图像的变化率,低通滤波器大小5*5
blur = cv2.blur(img,(5,5))
#cv2.boxFilter滤波器,-1表示输出图像深度与输入图像相同
boxfilter = cv2.boxFilter(img,-1,(5,5))
#cv2.GaussianBlur高斯滤波器,滤波器模板大小为奇数,1.5表示横向纵向滤波系数
gaussianblur = cv2.GaussianBlur(img,(5,5),1.2)

def salt(img,n):
    for k in range(n):
        #x坐标
        i = int(np.random.rand()*img.shape[0])
        #y坐标
        j = int(np.random.rand()*img.shape[1])
        if img.ndim == 2:
            img[i,j] = 255
        elif img.ndim == 3:
            img[i,j,0] = 255
            img[i,j,1] = 255
            img[i,j,2] = 255
    return img
cv2.imshow('original img',img)
cv2.imshow('blur img',blur)
cv2.imshow('boxfilter img',boxfilter)
cv2.imshow('gaussianblur img',gaussianblur)

salt = salt(img,1000)
#cv2.medianBlur中值滤波器消除噪点
medianblur = cv2.medianBlur(img,5)
cv2.imshow('salt img',salt)
cv2.imshow('medianblur img',medianblur)
cv2.waitKey(0)
cv2.destroyAllWindows()

结果:

原图:
这里写图片描述

blur:
这里写图片描述

salt:
这里写图片描述

medianblur:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值