OpenCV 图像滤波器

OpenCV 图像滤波器

图像滤波是通过改变像素的颜色和亮度来修改图像的过程。它还用于增加图像的亮度和对比度。在本教程中,我们将学习几种类型的滤波器。

双边滤波器

OpenCV提供 bilateralFilter() 函数来对图像应用双边滤波器。双边滤波器可以很好地减少不需要的噪声,同时保持边缘清晰。函数的语法如下所示:

 cv2.bilateralFilter(src, dst, d, sigmaSpace, borderType)

参数:

  • src- 表示图像的来源。它可以是一个8位或浮点型的1通道图像。
  • dst- 表示与src图像尺寸相同的目标图像。其类型与src图像相同。
  • d- 表示用于滤波的像素邻域的直径(整数类型)。如果其值为负,则从sigmaSpace计算。
  • sigmaColor- 表示在颜色空间中的滤波sigma。
  • sigmaSpace- 表示在坐标空间中的滤波sigma。

考虑以下示例:

import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread(r'C:\Users\DEVANSH SHARMA\baloon.jpg',1)

kernel = np.ones((5,5),np.float32)/25
blur = cv2.bilateralFilter(img,9,75,75)
plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(blur),plt.title('Bilateral Filter')
plt.xticks([]), plt.yticks([])
cv2.imshow("Image",blur)

输出

OpenCV 图像滤波器

盒子滤波器

我们可以使用 boxfilter() 函数来执行此滤波操作。它类似于平均模糊操作。

函数的语法如下所示:

cv2. boxfilter(src, dst, ddepth, ksize, anchor, normalize, bordertype) 

参数:

  • src – 它表示图像的来源。它可以是8位或浮点数,1通道图像。
  • dst – 它表示具有相同大小的目标图像。其类型将与src图像相同。
  • ddepth – 它表示输出图像的深度。
  • ksize – 它模糊核大小。
  • anchor – 它表示锚点。默认情况下,它的值指向坐标(-1,1),这意味着锚点在核心中心。
  • normalize – 它是一个标志,指定核是否应该被归一化。
  • borderType – 整数对象表示所使用边界的类型。

考虑以下示例:

import cv2
import numpy as np  
# using imread('path') and 0 denotes read as  grayscale image  
img = cv2.imread(r'C:\Users\DEVANSH SHARMA\baloon.jpg',1)  
img_1 = cv2.boxFilter(img, 0, (7,7), img, (-1,-1), False, cv2.BORDER_DEFAULT)
#This is using for display the image 
cv2.imshow('Image',img_1)
cv2.waitKey(3) # This is necessary to be required so that the image doesn't close immediately.  
#It will run continuously until the key press.  
cv2.destroyAllWindows()

输出

OpenCV 图像滤波器

Filter2D

它将图像与内核组合在一起。我们可以使用 Filter2D() 方法对图像执行此操作。函数的语法如下所示:

cv2.Filter2D(src, dst, kernel, anchor = (-1,-1))

参数:

  • src – 表示输入图像。
  • dst- 表示大小相同的目标图像。其类型与src图像相同。
  • kernel – 是一个卷积核,一个单通道浮点矩阵。如果要对不同通道应用不同的核,可以使用split()将图像分割为单独的颜色平面,并逐个进行处理。
  • anchor – 表示锚点,默认值为Point(-1,1),表示锚点位于核心中心。
  • borderType – 是一个整数对象,表示使用的边界类型。

考虑以下示例:

import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread(r'C:\Users\DEVANSH SHARMA\baloon.jpg',1)

kernel = np.ones((5,5),np.float32)/25
dst = cv2.filter2D(img,-1,kernel)
plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(dst),plt.title('Filter2D')
plt.xticks([]), plt.yticks([])
plt.show()

输出

OpenCV 图像滤波器

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程