详解用Python在图像上应用高斯滤波器

下面就来讲解用Python在图像上应用高斯滤波器的完整攻略。

什么是高斯滤波器?

高斯滤波器是一种线性平滑滤波器,它可以对噪声信号进行平滑处理。高斯滤波器的核心思想是使用高斯函数作为卷积核,对图像中的每个像素进行加权平均处理。通过调整高斯函数的标准差,可以控制滤波器的大小。

用Python实现高斯滤波器的步骤

下面将介绍用Python实现高斯滤波器的步骤:

  1. 导入相关的库:
import cv2
import numpy as np
from matplotlib import pyplot as plt
  1. 加载图像:可以使用cv2.imread()函数加载图像。
img = cv2.imread("lena.jpg", 0)
  1. 定义高斯卷积核:
kernel_size = (5, 5)
sigma = 1.5
kernel = np.zeros(kernel_size)
sum = 0
for i in range(kernel_size[0]):
    for j in range(kernel_size[1]):
        kernel[i, j] = np.exp(-(np.square(i - kernel_size[0] // 2) + np.square(j - kernel_size[1] // 2)) / (2 * np.square(sigma)))
        sum += kernel[i, j]
kernel /= sum
  1. 对图像进行高斯滤波:
filtered_img = cv2.filter2D(img, -1, kernel)
  1. 显示原图和处理后的图像:
plt.subplot(121), plt.imshow(img, cmap="gray"), plt.title("Original")
plt.subplot(122), plt.imshow(filtered_img, cmap="gray"), plt.title("Filtered")
plt.show()

示例

下面给出两个示例。

示例1

原始图像:

详解用Python在图像上应用高斯滤波器

代码:

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread("test1.png", 0)

kernel_size = (7, 7)
sigma = 1.5
kernel = np.zeros(kernel_size)
sum = 0
for i in range(kernel_size[0]):
    for j in range(kernel_size[1]):
        kernel[i, j] = np.exp(-(np.square(i - kernel_size[0] // 2) + np.square(j - kernel_size[1] // 2)) / (2 * np.square(sigma)))
        sum += kernel[i, j]
kernel /= sum

filtered_img = cv2.filter2D(img, -1, kernel)

plt.subplot(121), plt.imshow(img, cmap="gray"), plt.title("Original")
plt.subplot(122), plt.imshow(filtered_img, cmap="gray"), plt.title("Filtered")
plt.show()

处理后的图像:

详解用Python在图像上应用高斯滤波器

示例2

原始图像:

详解用Python在图像上应用高斯滤波器

代码:

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread("test2.jpg")

kernel_size = (11, 11)
sigma = 2
kernel = np.zeros(kernel_size)
sum = 0
for i in range(kernel_size[0]):
    for j in range(kernel_size[1]):
        kernel[i, j] = np.exp(-(np.square(i - kernel_size[0] // 2) + np.square(j - kernel_size[1] // 2)) / (2 * np.square(sigma)))
        sum += kernel[i, j]
kernel /= sum

filtered_img = cv2.filter2D(img, -1, kernel)

plt.subplot(121), plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)), plt.title("Original")
plt.subplot(122), plt.imshow(cv2.cvtColor(filtered_img, cv2.COLOR_BGR2RGB)), plt.title("Filtered")
plt.show()

处理后的图像:

详解用Python在图像上应用高斯滤波器

以上就是用Python在图像上应用高斯滤波器的完整攻略和两个示例的说明,希望能对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解用Python在图像上应用高斯滤波器 - Python技术站

(1)
上一篇 2023年3月25日
下一篇 2023年3月25日

相关文章

  • python3 实现对图片进行局部切割的方法

    当我们希望对一张图片进行局部切割并处理时,使用Python3提供的Image库可以轻松实现。下面是实现该功能的完整攻略: 步骤1:导入必要的库 需要导入Python3中的Pillow库(也称为PIL,Python Imaging Library),并使用其中的Image库进行图片的处理。代码如下: from PIL import Image 步骤2:打开图片…

    python 2023年6月6日
    00
  • Python学习之用pygal画世界地图实例

    下面我将详细讲解如何使用pygal库画世界地图的实例攻略。这个过程主要分为以下几个步骤: 安装pygal库:在命令行中输入pip install pygal即可安装。 导入pygal库和需要使用的数据:pygal库提供多种地图类型,这里我们使用pygal.maps.world.World来实现世界地图。我们还需要一些数据来给地图填色,以示不同的国家或地区之间…

    python 2023年5月19日
    00
  • Python – gphoto2:如何将输出转换为 JSON 或 python 数组

    【问题标题】:Python – gphoto2: how to convert output to JSON or python arrayPython – gphoto2:如何将输出转换为 JSON 或 python 数组 【发布时间】:2023-04-01 03:20:01 【问题描述】: 我正在使用 gphoto2,大多数命令都在工作,但我不知道如何使…

    Python开发 2023年4月8日
    00
  • Django笔记二十九之中间件介绍

    本文首发于公众号:Hunter后端原文链接:Django笔记二十九之中间件介绍 这一节介绍一下 Django 的中间件。 关于中间件,官方文档的解释为:中间件是一个嵌入 Django 系统的 request 和 response 的钩子框架,是一个能够全局改变 Django 输入/输出的系统。 我们可以这样理解,一个 request 请求发送到 Django…

    python 2023年4月24日
    00
  • 关于Python Tkinter Button控件command传参问题的解决方式

    如何在Tkinter中的button控件上使用command传参是一个常见的问题,下面是具体的解决方法: 标准的Button控件 首先我们来看一下标准的Button控件,它的command参数并不能直接传参,但是可以通过lambda表达式来传递参数。示例代码如下: from tkinter import * def print_name(name): pri…

    python 2023年6月13日
    00
  • 给Python中的MySQLdb模块添加超时功能的教程

    为了给Python中的MySQLdb模块添加超时功能,我们可以采用以下步骤: 1. 安装必要工具 首先,我们需要安装MySQLdb模块,以及DBUtils模块。可以使用pip命令进行安装,具体命令如下: pip install mysqlclient pip install dbutils 2. 为MySQLdb添加超时功能 我们可以使用Connection…

    python 2023年6月3日
    00
  • python数据操作之lambda表达式详情

    以下是“Python数据操作之lambda表达式详情”的完整攻略。 1. 概述 在Python中,lambda表达式是一种匿名函数,可以用于简化代码和提高代码的可读性。lambda表达式通常用于函数式编程,可以作为参数传递给其他函数,或者用于创建简单的函数。 2. lambda表达式的语法 lambda表达式的语法如下: lambda arguments: …

    python 2023年5月13日
    00
  • Python正则表达式re.search()用法详解

    Python正则表达式re.search()用法详解 在Python中,re模块提供了对正则表达式的支持。使用re模块,可以方便地进行字符串的配、查找、替换和分割等操作。本文将详讲解Python中re.search()方法的用法,包语法、示例说明和注意事项。 re.search()方法语法 re.search()方法在字符串中搜索正则表达式的第一个匹配项,并…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部