无锡企业网站建设报价,网站建设的职位,网站建设公司优惠中,电影网站开发背景目录
一、环境
二、平滑滤波
2.1、均值滤波
2.2、高斯滤波
2.3、中值滤波
2.4、双边滤波
三、完整代码 一、环境
本文使用环境为#xff1a;
Windows10Python 3.9.17opencv-python 4.8.0.74
二、平滑滤波
2.1、均值滤波
在OpenCV库中#xff0c;blur函数是一种简…目录
一、环境
二、平滑滤波
2.1、均值滤波
2.2、高斯滤波
2.3、中值滤波
2.4、双边滤波
三、完整代码 一、环境
本文使用环境为
Windows10Python 3.9.17opencv-python 4.8.0.74
二、平滑滤波
2.1、均值滤波
在OpenCV库中blur函数是一种简单而有效的图像平滑处理方法也被称为均值滤波。该函数通过将图像中每个像素的值设置为其邻域中像素值的平均值从而消除图像中的噪声。
函数原型如下
cv2.blur(src, ksize[, dst[, anchor]])
参数解释
src: 输入图像。它必须是8位或32位浮点型。ksize: 这是均值滤波器的大小它必须是奇数并且可以有两种形式例如 (5,5) 或 5. 在第二种情况下滤波器将是正方形的而在第一种情况下滤波器将是矩形的。dst: 输出图像。它的类型和源图像相同。anchor: 锚点的位置。默认值是 (-1,-1)这表示锚点在滤波器的中心。
下面是一个简单的示例
import cv2
import numpy as np
# 加载图像
img cv2.imread(image.jpg)
# 应用blur函数
blurred cv2.blur(img, (5,5)) # 使用5x5的滤波器
# 显示原图和处理后的图像
cv2.imshow(Original Image, img)
cv2.imshow(Blurred Image, blurred)
cv2.waitKey(0)
cv2.destroyAllWindows()
需要注意的是虽然blur函数可以有效地消除噪声但它也可能导致图像失去一些细节。因此在使用此函数时您可能需要考虑在消除噪声和保留细节之间取得平衡。
2.2、高斯滤波
GaussianBlur是OpenCV库中的一个函数它用于对图像进行高斯模糊。高斯模糊是一种图像处理技术通过对图像的每个像素应用一个高斯函数来达到模糊效果。这种方法在消除噪声和细节提取方面非常有效。
函数原型如下
cv2.GaussianBlur(src, ksize, sigmaX[, dst[, sigmaY[, borderType]]])
参数解释
src: 输入图像。它必须是8位或32位浮点型。ksize: 高斯核的大小。这个值必须是正整数并且可以有两种形式例如 (5,5) 或 5. 在第二种情况下滤波器将是正方形的而在第一种情况下滤波器将是矩形的。sigmaX: 表示高斯核函数在X方向的标准偏差。如果sigmaX是0那么标准偏差将根据核大小ksize计算。dst: 输出图像。它的类型和源图像相同。sigmaY: 表示高斯核函数在Y方向的标准偏差。如果sigmaY是0那么标准偏差将根据核大小ksize计算。borderType: 像素外插法默认值为cv2.BORDER_DEFAULT。
下面是一个简单的示例
python
import cv2
import numpy as np # 加载图像
img cv2.imread(image.jpg) # 应用GaussianBlur函数
blurred cv2.GaussianBlur(img, (5,5), 0) # 使用5x5的高斯滤波器无sigmaY值所以根据核大小计算标准偏差 # 显示原图和处理后的图像
cv2.imshow(Original Image, img)
cv2.imshow(Blurred Image, blurred)
cv2.waitKey(0)
cv2.destroyAllWindows()
与blur函数相比GaussianBlur可以提供更加柔和的模糊效果因为它考虑了图像的更多频率内容。但是这也会导致更多的细节丢失。因此在使用此函数时您可能需要考虑在消除噪声和保留细节之间取得平衡。
2.3、中值滤波
medianBlur函数是OpenCV库中的一个函数用于对图像进行中值滤波处理即使用中值滤波器来平滑图像。
函数原型如下
cv2.medianBlur(src, ksize[, dst])
src: 输入图像必须是8位或32位浮点型。ksize: 滤波器的大小必须是奇数可以有两种形式例如 (5,5) 或 5。当ksize为3或者5的时候图像深度需为CV_8UCV_16U或CV_32F其中之一而对于较大孔径尺寸的图片它只能是CV_8U。dst: 输出图像类型和源图像相同。可以用Mat::Clone来初始化得到目标图。
medianBlur函数使用中值滤波器来平滑图像。对于多通道图片每一个通道都单独进行处理并且支持就地操作In-place operation。在边界类型BorderTypes方面使用的是BORDER_REPLICATE。
2.4、双边滤波
双边滤波Bilateral Filter是一种非线性的滤波方法结合了图像的空间邻近度和像素值相似度的一种折衷处理同时考虑空域信息和灰度相似性达到保边去噪的目的。
双边滤波器的好处是可以做边缘保存edge preserving一般用高斯滤波去降噪会较明显地模糊边缘对于高频细节的保护效果并不明显。双边滤波器顾名思义比高斯滤波多了一个高斯方差sigmad它是基于空间分布的高斯滤波函数所以在边缘附近离的较远的像素不会太多影响到边缘上的像素值这样就保证了边缘附近像素值的保存。 但是由于保存了过多的高频信息对于彩色图像里的高频噪声双边滤波器不能够干净的滤掉只能够对于低频信息进行较好的滤波。
三、完整代码
import sys
import cv2 as cv
import numpy as np# Global VariablesDELAY_CAPTION 1500
DELAY_BLUR 100
MAX_KERNEL_LENGTH 31src None
dst None
window_name Smoothing Demodef main(argv):cv.namedWindow(window_name, cv.WINDOW_AUTOSIZE)# 读取图片imageName argv[0] if len(argv) 0 else data/lena.jpgglobal srcsrc cv.imread(cv.samples.findFile(imageName))if src is None:print (Error opening image)return -1if display_caption(Original Image) ! 0:return 0global dstdst np.copy(src)if display_dst(DELAY_CAPTION) ! 0:return 0# 均值滤波if display_caption(Homogeneous Blur) ! 0:return 0for i in range(1, MAX_KERNEL_LENGTH, 2):dst cv.blur(src, (i, i))if display_dst(DELAY_BLUR) ! 0:return 0# 高斯滤波if display_caption(Gaussian Blur) ! 0:return 0for i in range(1, MAX_KERNEL_LENGTH, 2):dst cv.GaussianBlur(src, (i, i), 0)if display_dst(DELAY_BLUR) ! 0:return 0# 中值滤波if display_caption(Median Blur) ! 0:return 0for i in range(1, MAX_KERNEL_LENGTH, 2):dst cv.medianBlur(src, i)if display_dst(DELAY_BLUR) ! 0:return 0# 双边滤波if display_caption(Bilateral Blur) ! 0:return 0# 双边滤波计算量相对大所以当kernel半径很大的时候就会较慢for i in range(1, MAX_KERNEL_LENGTH, 2):dst cv.bilateralFilter(src, i, i * 2, i / 2)if display_dst(DELAY_BLUR) ! 0:return 0display_caption(Done!)return 0# 显示黑色背景文字
def display_caption(caption):global dstdst np.zeros(src.shape, src.dtype)rows, cols, _ch src.shapecv.putText(dst, caption, (int(cols / 4), int(rows / 2)), cv.FONT_HERSHEY_COMPLEX, 1, (255, 255, 255))return display_dst(DELAY_CAPTION)# 显示效果图
def display_dst(delay):cv.imshow(window_name, dst)c cv.waitKey(delay)if c 0 : return -1return 0if __name__ __main__:main(sys.argv[1:])