Python基于OpenCV实现高斯平滑卷积核构建与图像滤波

Theo
Theo
发布时间:2026-10-14| 5人浏览过
原创

本文详细解析在Python中利用OpenCV实现高斯平滑的完整流程。内容涵盖奇数尺寸高斯卷积核的数学构建步骤,包括矩阵计算、求和及归一化处理。同时介绍利用getGaussianKernel函数分离构建一维水平与垂直核的方法,并通过具体代码演示如何对图像依次进行水平与垂直方向卷积,最终实现高效的高斯模糊效果。

假设存在一个列数为W、行数为H的高斯卷积核,其中W和H均为奇数。该卷积核的中心点(描点)坐标位于((H-1)/2, (W-1)/2)。构建该高斯卷积核的具体步骤如下:

1. 计算高斯矩阵

2. 计算高斯矩阵所有元素的总和

3. 将高斯矩阵的每个元素除以其总和,完成归一化处理

接下来,利用Python代码实现高斯卷积算子的构建过程。


def getGaussKernel(sigma, H, W):
  r, c = np.mgrid[0:H:1, 0:W:1]
  r -= (H - 1) / 2
  c -= (W - 1) / 2
  gaussMatrix = np.exp(-0.5 * (np.power(r) + np.power(c)) / math.pow(sigma, 2))
  # 计算高斯矩阵的和
  sunGM = np.sum(gaussMatrix)
  # 归一化
  gaussKernel = gaussMatrix / sunGM
  return gaussKernel

高斯卷积核可以分解为一个一维水平方向的高斯核与一个一维垂直方向的高斯核。OpenCV提供了构建一维垂直方向高斯卷积核的函数:Mat getGaussianKernel(int ksize, double sigma, int ktype = CV_64F)。

参数 释意
ksize 一维垂直方向上的高斯核行数,正奇数
sigma 标准差
ktype 返回值的数据类型为CV_32F或CV_64F,默认是CV_64F

下面通过Python代码具体演示图像的高斯平滑处理。首先对图像进行水平方向的卷积操作,随后进行垂直方向的卷积操作。其中,sigma参数代表高斯卷积核的标准差。


def gaussBlur(image,sigma,H,W,_boundary = 'fill', _fillvalue = 0):
  #水平方向上的高斯卷积核
  gaussKenrnel_x = cv2.getGaussianKernel(sigma,W,cv2.CV_64F)
  #进行转置
  gaussKenrnel_x = np.transpose(gaussKenrnel_x)
  #图像矩阵与水平高斯核卷积
  gaussBlur_x = signal.convolve2d(image,gaussKenrnel_x,mode='same',boundary=_boundary,fillvalue=_fillvalue)
  #构建垂直方向上的卷积核
  gaussKenrnel_y = cv2.getGaussianKernel(sigma,H,cv2.CV_64F)
  #图像与垂直方向上的高斯核卷积核
  gaussBlur_xy = signal.convolve2d(gaussBlur_x,gaussKenrnel_y,mode='same',boundary= _boundary,fillvalue=_fillvalue)
  return gaussBlur_xy
if __name__ == "__main__":
  image = cv2.imread("../images/timg.jpg", cv2.IMREAD_GRAYSCALE)
  cv2.imshow("image",image)
  #高斯平滑
  blurImage = gaussBlur(image, 5, 400, 400, 'symm')
  #对bIurImage进行灰度级显示
  blurImage = np.round(blurImage)
  blurImage = blurImage.astype(np.uint8)
  cv2.imshow("GaussBlur", blurImage)
  cv2.waitKey(0)
  cv2.destroyAllWindows()

运行结果截图如下:

以上为基于Python和OpenCV实现高斯平滑的完整内容,更多Python高斯平滑相关技术资料,敬请关注本站其他文章。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。