在看模糊操作之前,个人建议先去看看CNN卷积原理,这样才能比较好的理解模糊操作,光会用,不懂原理是要不得的。
模糊操作分为三个方面的操作
第一:均值模糊,能对水平方向和竖直方向进行模糊,或者对水平和竖直方向都进行模糊操作,可以进行去噪声的操作。
代码如下:
def blur_demo(image):
dst = cv.blur(image, (15, 1)) (15,1)可以看做是 x,y 轴 水平和垂直轴
cv.imshow("bule_demo", dst)
第二:中值模糊,中值模糊也能够去处噪声,可以去除椒盐噪声(像椒盐一样的噪声,一个一个小黑点),去除效果比均值模糊要好。
代码如下:
def median_demo(image):
dst = cv.medianBlur(image,5) 没有水平 垂直 值的大小代表了模糊程度的大小
cv.imshow("median_demo", dst)
第三:自定义模糊,自定义模糊要更加的灵活,可以灵活的处理不同大小图像的模糊,上面两个比较死板。
代码如下:
def custom_blur_demo(image):
kernel = np.ones([5 ,5], np.float32)/25 为什么要除以25 因为ones 里面的卷积核是 5*5的
dst = cv.filter2D(image, -1, kernel =kernel) kernel 就是卷积核
cv.imshow("custom_blur_demo", dst)
上面的代码是均值模糊的自定义代码,作用和第一个代码一样,所以能调 api的时候没必要自己写一个。
锐化 代码如下:
def custom_blur_demo(image):
kernel = np.array([[0, -1, 0],[-1, 5, -1 ], [0 ,-1,0]],np.float32) 当 array里面的值不全为1时,后面就没有必要除一个卷积核的大小了,这时的这个卷积核 为3 *3,一般来说卷积核都是奇数,不为偶数,卷积核为偶数时,图像处理可能会出现问题。 卷积核中的数总和最好为1 or 0,总和为0,做边缘梯度,总和为1做一个增强的操作。
dst = cv.filter2D(image, -1, kernel =kernel)
cv.imshow("custom_blur_demo", dst)