首先编写卷积代码

保证可以实现各种size滤波

def image_convolution(image,kernel):

[img_height,img_width] = image.shape

[kernel_height,kernel_width] = kernel.shape

expand_width = int((kernel_width - 1)/2)

expand_height = int((kernel_height - 1)/2)

con_height = int(img_height + expand_height*2)

con_width = int(img_width + expand_width*2)

#给结果图像、用于卷积处理的矩阵创建空间

result_image = np.zeros(image.shape)

con_image = np.zeros((con_height, con_width))

#填入图片

con_image[expand_height:expand_height+img_height, expand_width:expand_width+img_width]=image[ : , :]

#对每个像素点进行处理

for i in range(expand_height,expand_height+img_height):

for j in range(expand_width,expand_width+img_width):

result_image[i-expand_height][j-expand_width] = int(np.sum(con_image[i-expand_height:i+expand_height+1, j-expand_width:j+expand_width+1]*kernel))

print(result_image)

return result_image

均值滤波

设计kernel很简单,初始化为1后遍历除以size平方即可

def mean_mask(size):

mask=np.ones((size, size))

return mask/size/size

高斯滤波

def gauss_mask(sigma):

mask_height = mask_width = sigma*2+1

mask = np.zeros((mask_height, mask_width))

sum = 0

for i in range(-sigma,sigma+1):

for j in range(-sigma,sigma+1):

mask[i+sigma][j+sigma] = np.exp(-0.5 * (i ** 2 + j ** 2) / sigma ** 2)

sum += mask[i+sigma][j+sigma]

return mask/sum

代码总和

import cv2 as cv2

import matplotlib.pyplot as plt

import numpy as np

def image_convolution(image,kernel):

[img_height,img_width] = image.shape

[kernel_height,kernel_width] = kernel.shape

expand_width = int((kernel_width - 1)/2)

expand_height = int((kernel_height - 1)/2)

con_height = int(img_height + expand_height*2)

con_width = int(img_width + expand_width*2)

#给结果图像、用于卷积处理的矩阵创建空间

result_image = np.zeros(image.shape)

con_image = np.zeros((con_height, con_width))

#填入图片

con_image[expand_height:expand_height+img_height, expand_width:expand_width+img_width]=image[ : , :]

#对每个像素点进行处理

for i in range(expand_height,expand_height+img_height):

for j in range(expand_width,expand_width+img_width):

result_image[i-expand_height][j-expand_width] = int(np.sum(con_image[i-expand_height:i+expand_height+1, j-expand_width:j+expand_width+1]*kernel))

print(result_image)

return result_image

def gauss_mask(sigma):

mask_height = mask_width = sigma*2+1

mask = np.zeros((mask_height, mask_width))

sum = 0

for i in range(-sigma,sigma+1):

for j in range(-sigma,sigma+1):

mask[i+sigma][j+sigma] = np.exp(-0.5 * (i ** 2 + j ** 2) / sigma ** 2)

sum += mask[i+sigma][j+sigma]

return mask/sum

def mean_mask(size):

mask=np.ones((size, size))

return mask/size/size

if __name__ == "__main__":

image = cv2.imread("dongcha.jpg", 0)

image = cv2.resize(image,(512,512))

kernel = mean_mask(5)

result = np.zeros(image.shape)

result = image_convolution(image = image,kernel = kernel)

print(result)

result=result.astype(np.uint8)

cv2.imshow("result", result)

cv2.imshow("orignal", image)

# mask =gauss_mask(1)

print(kernel)

# print(mask/sum(mask))

cv2.waitKey(0)

效果如下

python均值滤波_均值滤波、高斯滤波python实现相关推荐

  1. python opencv高斯滤波_【OpenCV】基于Python的图像高斯平滑和椒盐噪声处理 | 学步园...

    最近要做一个Project,是使用TV来对添加了Gaussian和Salt&Pepper噪声的图像进行恢复,前期的任务是生成噪声污染的图像. 噪声图像的生成采用对图像进行高斯平滑,之后在随机的 ...

  2. 带噪图像的高斯滤波MATLAB,图像处理___高斯滤波与高斯噪声

    噪声 1.噪声表现形式 噪声在图像上常表现为一引起较强视觉效果的孤立像素点或像素块.一般,噪声信号与要研究的对象不相关,它以无用的信息形式出现,扰乱图像的可观测信息.通俗的说就是噪声让图像不清楚. 2 ...

  3. OpenCV图像学习八,图像归一化盒子滤波处理和图像高斯滤波处理实现

    OpenCV图像模糊原理        模糊操作是图像处理中最简单和常用的操作之一,使用该操作的原因之一就为了给图像预处理时减低椒盐噪声. 图像模糊,也称为平滑操作,是一种简单且经常使用的图像处理操作 ...

  4. opencv 高通滤波和低通滤波_一阶低通滤波原理详解

    在汽车标定中,使用最多的滤波算法即低通滤波,很多朋友可能知道怎么标定,但是不清楚具体的原理,因此本文将介绍一阶低通滤波的原理.算法建模仿真和优缺点: 一阶滤波算法的原理 一阶滤波,又叫一阶惯性滤波,或 ...

  5. python 两点曲线_十行代码,用Python做一个迷你版的美图秀秀

    美图秀秀相信大家都不陌生,大家只要操作美图秀秀,就可以P掉图片中脸上的一些瑕疵,让人变得更加的美丽.今天小编就带领大家来借助Python和Flask来实现一个美图秀秀的网页设计,大家只需要通过网页上传 ...

  6. 怎么用python自制计算公式_手把手教你用python制作简易计算器,能够记录你使用的情况...

    话不多说,首先先看效果图,它能够记录你在使用过程中的历史,方便你查看是否有错: 接下来就仔细分析一下是如何制作的: 简易计算器 第一步:导入资源库 在过程中使用到了tkinter这个资源库,win+R ...

  7. python做运动控制_第一课:用Python操控小龟小车运动

    欢迎来到小龟的课堂,今天我们讲如何用小龟小车的车载Python控制小车运动. 如果小伙伴还不会使用小龟小车的Python编辑器的话,可以阅读这篇教程<如何使用小龟小车的Python编辑器> ...

  8. print python excel分隔_合并/拆分 Excel?Python、VBA轻松自动化

    作者 | Ryoko 来源 | 凹凸数据 当你收集了 n 个人的 EXCEL 记录表,需要将它们汇成一个总表时你会怎么做呢? 如果不通过技术手段,要一个个打开再复制粘贴也太麻烦了吧! 此时就需要一个通 ...

  9. python半圆代码_趣味项目:用Python代码做个月饼送给你!

    所用工具 1.Python中的turtle包 2.对Python似火的热情 先来介绍一番 Turtle作图又叫海龟作图,是Python中比较有趣的一个模块,功能强大,使用方便.简单来说,比如有一块空地 ...

最新文章

  1. 写一个能自动生成四则运算题目的软件,要求除了整数,还要支持正分数的四则运算。和同学们比较各自的程序功能、实现方法的异同。...
  2. springboot 的启动流程
  3. jquery lazy load
  4. 《C++游戏开发》笔记十四 平滑过渡的战争迷雾(二) 实现:真正的迷雾来了
  5. MFC中如何在CMainFrame类中访问CxxxView视图类中的成员
  6. 字符串常量池、堆、栈
  7. 线性反馈移位寄存器(LFSR,Linear Feedback Shift Register)
  8. 虚拟化工具介绍 (资源)
  9. python如何登录并爬取获得百度指数统计图数据
  10. 台式计算机识别不了鼠标,USB无线鼠标失灵电脑检测不到无法识别怎么办
  11. MITRE ATTCK超详细学习笔记-01(背景,术语,案例)
  12. nacos修改用户名密码
  13. Matlab多if语句(if,elseif,else)分段执行时遇到被上一个条件覆盖的问题及解决
  14. Dbeaver基本使用
  15. 使用xmind绘制思维导向
  16. 基于 LSTM-Attention 的中文新闻文本分类
  17. jQuery_01选择器
  18. 文件转base64输出
  19. 浅谈在实验室的一个作品---8x8x8光立方
  20. .Net报表工具ActiveReports在线设计器教程 - 如何调用自定义字体

热门文章

  1. 1680 Catalan数
  2. offsetWidth与scrollLeft
  3. VMP分析之VMP2.13流程分析(三)
  4. Could not bind with 192.168.56.1: [WinError 10049] 在其上下文中,该请求的地址无效。 (please check your host binding
  5. 【Lilishop商城】记录一下B2B2C商城系统学习笔记~
  6. (Java实现) 删数问题
  7. 报表服务器项目交叉表,交叉表
  8. 平安养老险党委书记、董事长甘为民:做实、做多、做大养老三支柱
  9. ROS中的多坐标变换详解(示例+代码)
  10. java_day10作业