OpenCV学习Day03均值模糊、中值模糊、自定义模糊、边缘保留滤波(EPF)

推文:https://blog.csdn.net/zhuyong006/article/details/85682980

#模糊操作基本原理
#卷积原理
import cv2 as cv
import numpy as np
def blurDemo(image):#均值模糊,可以去噪声
    dst=cv.blur(image,(5,5))#括号中中的数值参数分别代表x、y方向上的模数值
    '''
    定义:blur(src,ksize,dst=None, anchor=None, borderType=None)
    定义是有5个参数,但最后三个均为none,所以也就2个参数
    src:要处理的原图像
    ksize: 必须是奇数卷积核,周围关联的像素的范围:代码中(5,5)就是5*5的大小,就是计算这些范围内的均值来确定中心位置的大小
    '''
    cv.imshow("blur",dst)
def medianBlurDemo(image):#中值模糊,适用去椒盐噪声(图片中有类似于椒盐的杂志)
    dst=cv.medianBlur(image,5)
    cv.imshow("blur",dst)
    '''
    定义:medianBlur(src, ksize, dst=None)
    ksize与blur()函数不同,不是矩阵,而是一个数字,例如为5,就表示了5*5的方阵
    可以看到中值滤波对于这些白点噪声的去除是非常的好的。
    '''
def customBlurDeom(image):#自定义模糊
    '''
    filter2D(src,ddepth,kernel):
    ddepth:深度,输入值为-1时,目标图像和原图像深度保持一致
    kernel: 卷积核(或者是相关核),一个单通道浮点型矩阵
    '''
    #kennel=np.ones([5,5],np.float32)/25
    kennel = np.array([[0,-1,0],[-1,5,-1],[0,-1,0]],np.float32)#锐化操作,照片更加立体清晰
    dst=cv.filter2D(image,-1,kennel)
    cv.imshow("customedBlur",dst)
def clamp(pv):
    if pv>255:
        return 255
    elif pv<0:
        return 0
    else:
        return pv
def gaussianNoise(image):#高斯噪声
    h,w,c=image.shape
    for row in range(h):
        for col in range(w):
            s=np.random.normal(0,20,3)
            b=image[row,col,0]#blue
            g=image[row,col,1]#green
            r=image[row,col,2]#red
            image[row,col,0]=clamp(b+s[0])
            image[row, col, 1] = clamp(b + s[1])
            image[row, col, 2] = clamp(b + s[2])
    cv.imshow("gaussianNoise",image)

src1=cv.imread("E:\OpenCVTests\IMG_4482.JPG")
cv.namedWindow("src1",cv.WINDOW_AUTOSIZE)
cv.imshow("src1",src1)


src2=cv.imread("E:\OpenCVTests/u=2386921870,1321148064&fm=26&gp=0.jpg")
cv.namedWindow("src2",cv.WINDOW_AUTOSIZE)
cv.imshow("src2",src2)

#函数调用区
#blurDemo(src1)
#medianBlurDemo(src2)
#customBlurDeom(src1)
dst=cv.GaussianBlur(src1,(0,0),15)#高斯模糊API,高斯模糊对高斯噪声有抑制作用
                        #对其中的两个参数设置,只需设置其中一个就好,分别为x、y和sigma
                        #原理:http://www.ruanyifeng.com/blog/2012/11/gaussian_blur.html
cv.imshow("GuassBlur",dst)

'''#耗时较长,通过函数计算出时间
t1=cv.getTickCount()
gaussianNoise(src1)
t2=cv.getTickCount()
time=(t2-t1)/cv.getTickFrequency()#毫秒
print("Time is:",time)
'''
cv.waitKey(0)
cv.destroyAllWindows()


#边缘保留滤波(EPF)
    #基于高斯模糊的原理,EPF在处理图像的边缘(即图像色彩差异大的地方)进行保留

import cv2 as cv
import numpy as np
def biDemo(image):#bilateralFilter()祛斑、磨皮等美颜效果极强
    dst=cv.bilateralFilter(image,0,150,5)
    '''高斯双边模糊:
                    d:即 distance,常规为 0 ,像素的邻域直径,可有sigmaColor和sigmaSpace计算可得;
                    sigmaColor:尽量取大,目的将小的差异模糊掉,噪声去掉
                    sigmaSpace:尽量取小,那么“和”就小一点,主要的差异就保留下来
     '''
    cv.imshow("biDemo",dst)
def shiftDemo(image):#类似于油画效果
    dst=cv.pyrMeanShiftFiltering(image,10,50)
    '''
    均值迁移模糊:
            sp:(The spatial window radius) 定义的漂移物理空间半径大小
            sr:(The color window radius) 定义的漂移色彩空间半径大小;
    '''
    cv.imshow("shiftDemo",dst)
src=cv.imread("E:\OpenCVTests/u=4129059048,1441148676&fm=26&gp=0.jpg")
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)
cv.imshow("input image",src)
#biDemo(src)
shiftDemo(src)
cv.waitKey(0)
cv.destroyAllWindows()

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值