初学opencv4 模糊操作

今天来总结opencv中模糊处理的知识点
模糊操作可以说是一个比较重要的,所以在学之前建议还是复习一下前面的知识。
初学opencv1
初学opencv2
初学opencv3

模糊操作基本元理

·1.基于离散卷积
·2.定义好每个卷积核
·3.不同卷积核得到不同的卷积效果
·4.模糊是卷积的一种表象

卷积原理

很抽象,我尽量讲清楚,这块我也是看了很久
在这里插入图片描述
这个8卷积过后怎么得到6的呢?就是13+16+1*8=17,然后因为是有3个单元格,所以整除,整除,整除重要的事情说三遍,然后17/3=5,所以就卷积之后成了5,之后的也同理,这里就不多说了。

代码层面的知识点

1.均值模糊
2.中值模糊
3.自定义模糊
4.意义与应用场合

均值模糊:

import cv2 as cv
import numpy as np

def blur_demo(image):
    dst = cv.blur(image,(1,3))#在x,y方向卷积和多大
    cv.imshow("blur_demo",dst)


print("-----------Hello Python-----------")
src = cv.imread(r"C:\Users\dahula\Desktop\jietu.png")
cv.namedWindow("input images",cv.WINDOW_AUTOSIZE)
cv.imshow("input images",src)
blur_demo(src)
cv.waitKey(0)

cv.destroyAllWindows()

效果:
在这里插入图片描述
可能差别太小几乎都看不出来区别。为了增强区别,我们将值调大,来看看效果:

dst = cv.blur(image,(1,15))

在这里插入图片描述
这样差别就很大了,很模糊了。这个是在竖直方向调整模糊度,现在来看看在水平方向调整模糊度:

dst = cv.blur(image,(15,1))

在这里插入图片描述
接下来试试在x,y方向同时改变

dst = cv.blur(image,(5,5))

在这里插入图片描述

中值模糊:

import cv2 as cv
import numpy as np

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

print("-----------Hello Python-----------")
src = cv.imread(r"C:\Users\dahula\Desktop\12.png")
cv.namedWindow("input images",cv.WINDOW_AUTOSIZE)
cv.imshow("input images",src)
median_blur_demo(src)
cv.waitKey(0)

cv.destroyAllWindows()

在这里插入图片描述
像原图中间这些黑点点就是噪点,他有一个很奇葩的名字“椒盐噪声”,对没有打错字,就是椒盐噪声。中值模糊有很好的去噪效果。
定义:椒盐噪声也称为脉冲噪声,是图像中经常见到的一种噪声,它是一种随机出现的白点或者黑点,可能是亮的区域有黑色像素或是在暗的区域有白色像素(或是两者皆有)。
刚刚说了中值去噪是最好的去噪方法,那么我们来看看均值模糊的降噪效果:
在这里插入图片描述
可以看到,效果并没有中值降噪那么明显,但也可以降噪。

自定义模糊:

import cv2 as cv
import numpy as np

def custom_blur_demo(image):
    kernel = np.ones([5,5],np.float32)/25#为了保证值在0到255之间
    dst = cv.filter2D(image,-1,kernel=kernel)
    cv.imshow("custom",dst)

print("-----------Hello Python-----------")
src = cv.imread(r"C:\Users\dahula\Desktop\jietu.png")
cv.namedWindow("input images",cv.WINDOW_AUTOSIZE)
cv.imshow("input images",src)
custom_blur_demo(src)
cv.waitKey(0)

cv.destroyAllWindows()

在这里插入图片描述
这样的自定义模糊处理下来的照片与中值模糊的效果就一样了。
再展示一个通过自定义模糊实现轻微模糊的

kernel = np.arry[[1,1,1],[1,1,1],[1,1,1], np.float32]/9

在这里插入图片描述
然后对数组里的值进行修改

kernel = np.arry[[-1,0,-1],[-1,5,-1],[-1,0,-1], np.float32]

在这里插入图片描述
这样就使得照片更有立体感了。

总结:这就是模糊操作,感觉需要对opencv的api有更多的了解才可以自己熟练的修改图片的样式,下去会多看一些有关opencv api的知识,加油!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值