本文概述
- 双边过滤器
- 箱式过滤器
- Filter2D
双边过滤器 OpenCV提供了bilateralFilter()函数以将双边过滤器应用于图像。双边滤波器可以很好地减少有害噪声, 同时保持边缘清晰。该函数的语法如下:
cv2.bilateralFilter(src, dst, d, sigmaSpace, borderType)
参数:
- src-表示图像的来源。它可以是8位或浮点1通道图像。
- dst-表示相同尺寸的目标图像。其类型将与src映像相同。
- d-表示在滤波过程中使用的像素邻域(整数类型)的直径。如果其值为负, 则根据sigmaSpace计算得出。
- sigmaColor-表示色彩空间中的滤镜sigma。
- sigmaSpace-表示坐标空间中的过滤器sigma。
import cv2import numpy as npfrom matplotlib import pyplot as pltimg = cv2.imread(r'C:\Users\DEVANSH SHARMA\baloon.jpg', 1)kernel = np.ones((5, 5), np.float32)/25blur = 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 cv2import numpy as np# using imread('path') and 0 denotes read asgrayscale imageimg = 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映像相同。
- 内核-这是一个卷积内核, 一个单通道浮点矩阵。如果要将不同的内核应用于不同的通道, 请使用split()将图像拆分为单独的色彩平面, 分别对其进行处理。
- 锚-表示锚点, 默认情况下其值为Point(-1, 1), 这意味着锚位于内核中心。
- borderType-一个整数对象, 表示使用的边框的类型。
import cv2import numpy as npfrom matplotlib import pyplot as pltimg = cv2.imread(r'C:\Users\DEVANSH SHARMA\baloon.jpg', 1)kernel = np.ones((5, 5), np.float32)/25dst = 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图像侵蚀和膨胀
- OpenCV图像基本操作
- OpenCV图像轮廓
- OpenCV模糊(图像平滑)
- OpenCV Canny边缘检测
- OpenCV教程 | Python使用OpenCV
- OpenCV Blob检测
- 使用OpenCV进行人脸识别和人脸检测
- python|python-opencv快速上手教程