有时候我们想要处理的图像中噪音太多,影响到我们的识别判断,我们就需要对图像进行模糊处理,使图像变得平滑。
而opencv-python提供给我们cv2.filter()函数来对图像进行2D卷积,我们可以使用自定义的卷积核来对图像进行卷积操作。
构造函数:
dst=cv.filter2D(src, ddepth, kernel[, dst[, anchor[, delta[, borderType]]]])
参数解释
- src:待处理图像
- ddepth:目标图像深度,如果值为-1则表示目标图像输出为与原图像深度相同。
- kernel:自定义的卷积核,float32型浮点矩阵。
- anchor 内核的锚点,指示内核中过滤点的相对位置;锚应位于内核中;默认值(-1,-1)表示锚位于内核中心。
- detal 在将它们存储在dst中之前,将可选值添加到已过滤的像素中。类似于偏置。
- borderType 像素外推法,参见BorderTypes
图像内核是一个小矩阵,在Photoshop或Gimp中找到的效果都可以实现,例如模糊,锐化,轮廓或浮雕。它们还用于机器学习中的“特征提取”,这是一种用于确定图像最重要部分的技术。在这种情况下,该过程更普遍地称为“卷积”
有许多特殊的内核,一 一记录下来。
这些效果唯一的差别就是他们的卷积核不同
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/eb33bf9d8cf6def9de9efd064d0b4b64.jpeg)
模糊(blur)
0.0625 | 0.125 | 0.0625 |
---|
0.125 | 0.25 | 0.125 |
0.0625 | 0.125 | 0.125 |
import numpy as np
import cv2
img=cv2.imread('D://zopencv//ball.jpg')
kernel=np.array( ( [0.0625, 0.125, 0.0625],
[0.125, 0.25, 0.125],
[0.0625, 0.125, 0.0625]),dtype="float32")
dst=cv2.filter2D(img,-1,kernel)
mask=cv2.resize(dst,None,fx=0.5,fy=0.5,interpolation=cv2.INTER_AREA)
cv2.imshow('image',mask)
cv2.waitKey(0)
cv2.destroyAllWindows()
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/1fc9f2cd3d20b37dd6ad1a3ceffd08ee.png)
sobel
kernel=np.array( ( [-1,-2,-1],
[0,0,0],
[1,2,1]),dtype="float32")
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/018dd461696803ae1ef20fbeb31e67fc.png)
浮雕(emboss)
在这里插入代码片
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/6afeeeabe258b4c2eb4ca0a3a04820a3.png)
大纲(outline)
轮廓内核/边缘内核,强调边缘
在这里插入代码片
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/2339626b31d8138d903a64297f38f8f8.png)
锐化(sharpen)
kernel=np.array( ( [0,-1,0],
[-1,5,-1],
[0,-1,0]),dtype="float32")
![在这里插入代码片](https://i-blog.csdnimg.cn/blog_migrate/4c62e5cab9bfb18118f90c9f2f6423a4.png)
拉普拉斯算子(laplacian operator)
用于边缘检测,或者图像中的模糊处理。
kernel=np.array( ( [0,1,0],
[1,-4,1],
[0,1,0]),dtype="float32")
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/e11604e5a62628deb5172f36c7acc18d.png)