024-OpenCV滤波
作者:互联网
话不多说,上代码,看结果。
import cv2 # 导入库
import numpy as np
import random
'''
cv2.imread(filename,flags)
# filename为文件名,图片与.py文件在一个文件夹时输入文件名即可
# 不在一个文件夹时输入图片的路径和名字
# flags为图片的颜色类型,默认为1,灰度图像为0
'''
img = cv2.imread('12.jpg')
'''
cv2.namedWindow(winname,flags)
# winname是窗口名字
# flags为窗口显示方式,cv2.WINDOW_NORMAL为正常显示,可以调整大小
# cv2.WINDOW_AUTOSIZE显示原图片的大小,用户不能调整大小
'''
cv2.namedWindow('img', cv2.WINDOW_NORMAL)
cv2.namedWindow('boxFilter-False', cv2.WINDOW_NORMAL)
cv2.namedWindow('blur', cv2.WINDOW_NORMAL)
cv2.namedWindow('Gaussian', cv2.WINDOW_NORMAL)
cv2.namedWindow('medianBlur', cv2.WINDOW_NORMAL)
cv2.namedWindow('bilateralFilter', cv2.WINDOW_NORMAL)
for num in range(0, 1000): # 控制雪花点个数
i = random.randint(0, img.shape[0]) % img.shape[0]
j = random.randint(0, img.shape[1]) % img.shape[1]
img[i, j] = [255, 255, 255]
cv2.imshow('img', img)
'''
# 滤波分为低通滤波和高通滤波
# 低通滤波是为了图像平滑去噪,高通滤波是为了边缘检测
# 高通滤波器是检测图像的某个区域,然后根据像素与周围像素的亮度差值来提升该像素的亮度的滤波器。
# 也就是说,如果一个像素比它周围的像素更突出,就会提升它的亮度。
# 低通滤波器则是在像素与周围像素的亮度差值小于一个特定值时,平滑该像素的亮度。
'''
'''
cv2.boxFilter(src, ddepth, ksize, dst, anchor, normalize, borderType)
方框滤波
# src 要滤波的图像 ddepth 图像深度, -1代表使用原图像深度
# 像素深度和图像深度是两个相互关联但又有所不同的两个概念。
# 像素深度是指存储每个像素所需要的比特数。
# 假定存储每个像素需要8bit,则图像的像素深度为8。
# 图像深度是指像素深度中实际用于存储图像的灰度或色彩所需要的比特位数。
# 假定图像的像素深度为16bit,但用于表示图像的灰度或色彩的位数只有15位,则图像的图像深度为15。
# 图像深度决定了图像的每个像素可能的颜色数,或可能的灰度级数。
# 例如,彩色图像每个像素用R,G,B三个分量表示,每个分量用8位,像素深度为24位
# ksize 内核的大小 anchor 锚点,即要平滑的点,默认值(-1, -1),即在核中心
# ksize(3, 3)表示3 * 3的核大小
# dst 输出图像
# normalize 内核是否被归一化,默认为True, 为True时,方框滤波就变成了均值滤波
# borderType 图像像素边界类型,默认就行
'''
img1 = cv2.boxFilter(img, -1, (3, 3), normalize=False)
cv2.imshow('boxFilter-False', img1)
'''
cv2.blur(src, ksize, dst, anchor, borderType)
均值滤波
# 用邻域内像素均值来代替该点像素值,均值滤波在去噪的同时也破坏了图像细节部分
# src 要滤波的图像 ksize 内核的大小 anchor 锚点,即要平滑的点,默认值(-1, -1),即在核中心
# ksize(3, 3)表示3 * 3的核大小
# dst 输出图像
# borderType 图像像素边界类型,默认就行
'''
img2 = cv2.blur(img, (3, 3))
cv2.imshow('blur', img2)
'''
cv2.GaussianBlur(src,ksize, sigmaX, dst, sigmaY, borderType)
高斯滤波
# src 要滤波的图像 dst 输出图像
# ksize(x,y)表示内核大小,x,y可以不同,但是必须为正奇数或者0, 由sigma计算得来
# sigmaX: 表示高斯函数在X方向上的标准偏差
# sigmaY: 表示高斯函数在Y方向上的标准偏差
# 若sigmaY=0, 就将它设置为sigmaX;
# 若sigmaY、sigmaX=0,则由ksize.x和ksize.y计算出来
# borderType 图像像素边界类型,默认就行
'''
img3 = cv2.GaussianBlur(img, (7, 7), 0)
cv2.imshow('Gaussian', img3)
'''
cv2.medianBlur(src, ksize, dst)
中值滤波 一种非线性滤波, 是用像素点邻域灰度值的中值代替该点的灰度值, 可以去除脉冲噪声和椒盐噪声
# src 要滤波的图像 dst 输出图像
# ksize int类型的孔径的线性尺寸, 大于1的奇数
'''
img4 = cv2.medianBlur(img, 3)
cv2.imshow('medianBlur', img4)
'''
cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace, dst, borderType)
双边滤波,一种非线性滤波, 是结合图像空间邻近度和像素值相似度的一种折中处理, 尽量在去噪同时保存边缘
# src 要滤波的图像 dst 输出图像 d表示过滤过程中每个像素的邻域直径
# sigmaColor 颜色空间滤波器 sigma值, 值越大表面该像素邻域内有越广泛的颜色会混到一起,产生较大的半相等颜色区域
# sigmaSpace: 坐标空间中滤波器的sigma值, 坐标空间的标准方差
# borderType 图像像素边界类型,默认就行
'''
img5 = cv2.bilateralFilter(img, 5, 55, 255)
cv2.imshow('bilateralFilter', img5)
'''
cv2.waitKey(delay)
# delay为正数时,延时delay毫秒结束
# 想要用按下某个键时退出可用以下方法:
# if(cv2.waitKey(0) == ord('q')):
exit(0)
#别的方法也行,不唯一
'''
if cv2.waitKey(0) & 0xFF == 27:
exit(0)
'''
cv2.destroyWindow(winname)
#结束窗口,winname为窗口名
cv2.destroyAllWindows()
#结束所有窗口
'''
cv2.destroyAllWindows() # 销毁所有窗口
结果如下图。
就先这样,遇到别的再补充。
标签:img,OpenCV,滤波,cv2,像素,024,ksize,图像 来源: https://blog.csdn.net/weixin_48013634/article/details/122746989