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

双边滤波器

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

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

参数:

  • src- 表示图像的源。它可以是8位或浮点,1通道图像。
  • dst- 表示相同大小的目标图像。其类型将与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)  

输出

11-1.png

方框滤波器

我们可以使用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()  

输出

11-2.png

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()  

输出

11-3.png

标签: OpenCV, OpenCV教程, OpenCV图像识别, OpenCV安装教程, OpenCV下载, OpenCV入门, OpenCV基础, OpenCV库, OpenCV学习, OpenCV指南, OpenCV教程中文版, OpenCV快速入门, OpenCV基础教程