python实现opencv学习十一:利用卷积对图像模糊处理

come from : https://blog.csdn.net/u011321546/article/details/79578029

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

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

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

一:调用函数实现模糊

测试代码如下

# -*- coding=GBK -*-
import cv2 as cv
 
 
 
 
def mo_image(src1):
    src2 = cv.blur(src1, (5, 5))
    cv.imshow("均值模糊", src2)
 
 
    src2 = cv.medianBlur(src1, 5)
    cv.imshow("中值模糊", src2)
 
 
    src2 = cv.GaussianBlur(src1, (5, 5), 2)
    cv.imshow("高斯模糊", src2)
 
 
    src2 = cv.bilateralFilter(src1, 5, 5, 2)
    cv.imshow("双边滤波", src2)
 
 
src = cv.imread("C://1.jpg")
cv.namedWindow("原来", cv.WINDOW_NORMAL)
cv.imshow("原来", src)
mo_image(src)
cv.waitKey(0)
cv.destroyAllWindows()
运行结果如下

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

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

  src:要处理的原图像

  ksize: 周围关联的像素的范围:代码中(5,5)就是5*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.双边滤波函数bilateralFilter():定义:bilateralFilter(src, d, sigmaColor, sigmaSpace, dst=None, borderType=None)
d:邻域直径
sigmaColor:颜色标准差
sigmaSpace:空间标准差

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

二:自定义模糊

代码如下:

#自定义模糊函数
def zi_image(src1):
    kernel1 = np.ones((5, 5), np.float)/25#自定义矩阵,并防止数值溢出
    src2 = cv.filter2D(src1, -1, kernel1)
    cv.imshow("自定义均值模糊", src2)
    kernel2 = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]], np.float32)
    src2 = cv.filter2D(src1, -1, kernel2)
    cv.imshow("自定义锐化", src2)
调用后运行如下:

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

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

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

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

猜你喜欢

转载自blog.csdn.net/zmjames2000/article/details/88089982