opencv学习(九):利用卷积对图像模糊处理

在图像上个人觉得卷积就是:对于某一位置的像素,通过算法来把它附近的所有像素点的值联合起来,重新设置这个像素的大小。(大概就是这样)

这个算法类似有:均值,中值,就是取周围所有像素的均值、中值来设置这个像素的大小。

(关于边界问题:有几种填充方法:补零、边界复制、块复制、镜像复制等方法) 

代码如下:

#导入cv模块
import cv2 as cv
import numpy as np

def blur_demo(image):  #均值模糊
    dst=cv.blur(image,(1,3))
    cv.imshow("blur_demo",dst)

def median_blur_demo(image):  #中值模糊
    dst=cv.medianBlur(image,5)
    cv.imshow("median_blur_demo",dst)

'''
     custom_blur:自定义模糊、锐化,中间像素比重为5,其他为0和-1,总权重为1
     算子自定义取值:奇数,总和为1或0,总和为0:做边缘梯度,总和为1:做增强
'''
def custom_blur_demo(image):
    #kernel=np.ones([5,5],np.float32)/25
    kernel=np.array([[0,-1,0],[-1,5,-1],[0,-1,0]],np.float32)
    dst=cv.filter2D(image,-1,kernel=kernel)
    cv.imshow("custom_blur_demo",dst)

print("------------Hi,Python!-------------")
# 读取图像,支持 bmp、jpg、png、tiff 等常用格式
src = cv.imread("F:/Projects/images/2.jpg")
#创建窗口并显示图像
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)
cv.imshow("input image",src)   #显示原图
blur_demo(src)
median_blur_demo(src)
custom_blur_demo(src)
cv.waitKey(0)
#释放窗口
cv.destroyAllWindows()

运行效果:

1.均值模糊函数blur():定义:blur(src,ksize,dst=None, anchor=None, borderType=None)

定义是有5个参数,但最后三个均为none,所以也就2个参数

  src:要处理的原图像

  ksize: 周围关联的像素的范围:代码中(5,5)就是9*5的大小,就是计算这些范围内的均值来确定中心位置的大小

2.中值模糊函数medianBlur(): 定义:medianBlur(src, ksize, dst=None)

ksize与blur()函数不同,不是矩阵,而是一个数字,例如为5,就表示了5*5的方阵

3.高斯平滑函数GaussianBlur():定义:GaussianBlur(src, ksize, sigmaX, dst=None, sigmaY=None, borderType=None)

sigmaX:标准差

4、自定义模糊:

 使用的函数为:filter2D():定义为filter2D(src,ddepth,kernel)

  ddepth:深度,输入值为-1时,目标图像和原图像深度保持一致

  kernel: 卷积核(或者是相关核),一个单通道浮点型矩阵

修改kernel矩阵即可实现不同的模糊

5.双边滤波函数bilateralFilter():定义:bilateralFilter(src, d, sigmaColor, sigmaSpace, dst=None, borderType=None)
d:邻域直径
sigmaColor:颜色标准差
sigmaSpace:空间标准差

参考资料:http://lib.csdn.net/article/opencv/25920
 

猜你喜欢

转载自blog.csdn.net/weixin_39036700/article/details/84748222