Python+OpenCV 实现简单的高斯滤波(推荐)
作者:林林zonzon 发布时间:2021-07-18 20:31:26
标签:Python,OpenCV,高斯滤波
基本原理讲解:高斯模糊的算法
高斯核函数的编写:构建权重矩阵,采用高斯二维分布函数的形式进行处理。需要注意的是,这里我没有特判当sigma = 0的时候的情况。
即是实现:
1)权重矩阵的构建
根据公式:
计算矩阵内部结构,其中因为要进行归一化处理,e前方的系数会被约去,因此代码中不体现。
2)矩阵元素归一化处理
计算矩阵内部元素总和sum,最后做矩阵除法得到归一化处理后的权重矩阵。
# 高斯核生成函数 kernel_size:滤波核大小 sigma:高斯核函数的局部影响范围
def gauss(kernel_size, sigma):
#定型0填充
kernel = np.zeros((kernel_size, kernel_size))
#确定正态分布中间值
center = kernel_size // 2
# s:方差 sum:记录总和
s = sigma ** 2
sum = 0
for i in range(kernel_size):
for j in range(kernel_size):
#由于最后要进行归一化处理,此处根号下2Π计算可以省略
x, y = i - center, j - center
kernel[i, j] = np.exp(-(x ** 2 + y ** 2) / (2 * s))
sum += kernel[i, j]
#归一化处理后输出
kernel = kernel / sum
return kernel
滤波函数的编写:将图片中的每个像素点(边缘除外)及其周围像素乘以权重矩阵,实现高斯滤波
需要注意的是此函数仅能处理彩 * 片,因为只有彩 * 片拥有img.shape[2]元素,灰度图片没有img.shape[2]元素不能用这个方法处理。
# 高斯滤波实现,img:输入图像 kermel:输入高斯核函数
def myfilter(img,kernel):
# 读取img行数核列数
h = img.shape[0]
w = img.shape[1]
# 直接拷贝父对象
img1 = copy.copy(img)
# 去掉边缘
for i in range(1,h-1):
for j in range(1,w-1):
# 三通道处理
for c in range(0,2):
sum = 0
# 加权
for k in range(-1,2):
for l in range(-1,2):
sum += img[i+k,j+l,c]*kernel[k+1,l+1]
img1[i,j,c] = sum
return img1
同时在处理高斯滤波的时候,函数采取的是针对3*3的kernel_size进行编写的,要更改kernel_size的大小,需要更改此处的range范围。
下面是灰度图像的处理方式:
def myfilter2(img,kernel):
# 读取img行数核列数
h = img.shape[0]
w = img.shape[1]
# 直接拷贝父对象
img1 = copy.copy(img)
# 去掉边缘
for i in range(1,h-1):
for j in range(1,w-1):
sum = 0
for k in range(-1,2):
for l in range(-1,2):
sum += img[i+k,j+l]*kernel[k+1,l+1]
img1[i,j] = sum
return img1
最后整个运行代码:
import copy
import cv2
import numpy as np
#图像读取
img_y = cv2.imread('p2.jpg')
# 选择高斯生成函数3*3,其中sigama = 3
kernel = gauss(3,3)
# 打印这个生成函数
print(kernel)
# 高斯滤波处理
img1 = myfilter(img_y, kernel)
cv2.imshow('P1_yuantu',img_y)
cv2.imshow('P1_gaussian', img1)
cv2.waitKey(0)
输入输出图像结果展示:
原图与高斯滤波后
需要注意的是采取的方法很原始,如果输入的图像过大,运行时间会很久。
这方面东西挺有意思的,只是初略的学习,写些基础的东西,应该还有错漏的地方,希望有大佬们多多指点。
来源:https://blog.csdn.net/zujiasheng/article/details/120364435
0
投稿
猜你喜欢
- 使用matplotlib.tri.CubicTriInterpolator.演示变化率计算:完整实例:from matplotlib.tri
- 为什么我写ASP分页教程要提到AJAX呢,因为我们要多练习一下编程过程中,结构化的重要性. 再加上很多朋友对分页感到很高深,所以一直都不敢去
- 本文实例讲述了Python实现获取nginx服务器ip及流量统计信息功能。分享给大家供大家参考,具体如下:#!/usr/bin/python
- 基于ASP技术开发Internet/Intranet上的MIS系统是非常方便的,首先是它借用了ADO技术和概念,同时
- 使用xhtml+css布局经常性地会使用到float,很多邪门的事儿都有可能是浮动在作怪,那么清除浮动就是必须要做的,而且随时性地对父级元素
- 1. 文件夹结构指定文件夹:E:/Code/Python/test指定文件:test.txt指定文件夹下的目录及文件:文件夹a:a.txtt
- Scrapy下载图片项目介绍Scrapy是一个适用爬取网站数据、提取结构性数据的应用程序框架,它可以通过定制化的修改来满足不同的爬虫需求。使
- 学习前言最近在学目标检测……SSD的源码好复杂……看
- 不知道大家有没有一种感觉,每次当使用numpy数组的时候坐标轴总是傻傻分不清楚,然后就会十分的困惑,每次运算都需要去尝试好久才能得出想要的结
- 这是python编写的用于测试网站访问速率的代码片段,可以输出打开某url的时间,访问100次的平均时间,最大时间和最小时间等等import
- 前言玩博客一个多月了,渐渐发现了一些有意思的事,经常会有人用同样的评论到处刷,不知道是为了加没什么用的积分,还是纯粹为了表达楼主好人。那么问
- 前言最近又在重新学习编译原理了,其实两年前也复习过,当初是为了能实现通过 MySQL 的 DDL 生
- 相信很多人像我一样在学习python,pandas过程中对数据的选取和修改有很大的困惑(也许是深受Matlab)的影响。。。到今天终于完全搞
- 为什么要修改镜像源?一般使用python安装库,会用到pip install xxx 指令或者conda install xxx指令,因为p
- 网页设计中的脏、乱、差,是我们在设计过程中常会遇到的问题。通常"脏"是由对色彩使用不当所产生的,而色彩使用不当产生的不好
- 目录什么是websocket?第一步 准备工作第二步 编写聊天室页面第三步 编写后台websocket路由及处理方法第四步 运行看效果小结C
- 前面已经提到,CSS之所以如此强大,是因为它采用HTML文档结构来决定其样式的应用。但这仅仅只是一方面,因为它只暗示了CSS之所以使用文档结
- python除了关键字(keywords)和内置的类型和函数(builtins),更多的功能是通过libraries(即modules)来提
- 我正在参加天池上的一个竞赛,刚开始用的是DenseNet121但是效果没有达到预期,因此开始尝试使用模型融合,将Desenet和Xcepti
- 本文实例讲述了Python使用crontab模块设置和清除定时任务操作。分享给大家供大家参考,具体如下:centos7下安装Python的p