📜  OpenCV图像过滤器

📅  最后修改于: 2021-01-07 06:39:05             🧑  作者: Mango

OpenCV图像过滤器

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

双边过滤器

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)

输出量

箱式过滤器

我们可以使用boxfilter()函数执行此过滤器。它类似于平均模糊操作。该函数的语法如下:

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

参数:

  • src-表示图像的来源。它可以是8位或浮点1通道图像。
  • dst-表示相同尺寸的目标图像。其类型将与src映像相同。
  • ddepth-表示输出图像的深度。
  • ksize-模糊内核大小。
  • 锚点-表示锚点。默认情况下,其值指向坐标(-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()

输出量

Filter2D

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

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

参数:

  • src-代表输入图像。
  • dst-表示相同尺寸的目标图像。其类型将与src映像相同。
  • 内核-这是一个卷积内核,一个单通道浮点矩阵。如果要将不同的内核应用于不同的通道,请使用split()将图像拆分为单独的色彩平面,分别对其进行处理。
  • 锚点-表示锚点,默认情况下其值为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()

输出量