opencv+python入门之五(阈值分割、滤波)

本文介绍了OpenCV与Python结合进行图像处理的基础操作,包括阈值分割和滤波技术。阈值分割通过cv2.threshold函数实现,能够将灰度图像二值化。滤波部分详细讲解了均值滤波、方框滤波、高斯滤波和中值滤波的原理及使用方法,提供了相应的函数调用示例。
摘要由CSDN通过智能技术生成

1.阈值分割

阈值分割的作用是把一幅灰度图二值化,通过cv2.threshold(src,thresh,maxval,type)函数实现。thresh代表的是阈值,maxval指的是最大值,type是类型,主要有以下参数cv2.THRESH_BINARY,THRESH_BINARY_INV,THRESH_TRUNC,

THRESH_TOZERO,THRESH_TOZERO_INV,THRESH_OTSU,THRESH_TRIANGLE,THRESH_MASK等。详细含义如下:

                           

以THRESH_BINARY为例,当像素值大于阈值时,直接取最大值,否则取0。要注意的是这里的最大值与设置的阈值无关,例如阈值为128,最大值可以设置为64,65或者255。

代码示例:

retval,dst = cv2.threshold(img,128,64,cv2.THRESH_BINARY) 

2.滤波专题

2.1均值滤波

原理:均值滤波是将选取的核与图像中的区域进行卷积,用卷积后的值代替图像区域中间的那个值。通俗一点,以3x3的核为例,均值滤波就是将其周围8个像素值一起求平均,用这个平均数代替中间的像素值。

dst = cv2.blur(img,(5,5))

2.2方框滤波

方框滤波和均值滤波很像。通过cv2.boxFilter(src,depth,kernel,normalize)来实现。其中depth代表图片深度,取-1时表示与原图深度相同;kernel表示的是核的大小,要求输入的是一个tuple;normalize是选择是否进行归一化操作,等于1时表示进行归一化,此时和均值滤波相同。若不进行归一化,就相当于将周围的值加起来,代替中间的元素,可见非常容易溢出。

dst = cv2.boxFilter(img,-1,(9,9),False)

2.3高斯滤波

高斯滤波指的是将周围的像素值按照不同的权重进行运算,(均值滤波相当于权重都为1),高斯滤波里中间像素值越近,其权重越大。调用的函数为cv2.GaussianBlur(src,ksize,sigmax)。ksize指的是核的大小,sigmax控制的是权重之间的方差,默认为0即可。例如下面便是sigmax取不同值的时候,权重的值

                                  \begin{bmatrix} 1 \1 \2\1\1\\ 1\2 \4\2\1\\ 2\4\8\4\2\\1\2\4\2\1\\1\1\2\1\1 \end{bmatrix}                                    \begin{bmatrix} 0 \0 \1\0\0\\ 0\1 \2\1\0\\ 1\2\3\4\1\\0\1\2\1\0\\0\0\1\0\0 \end{bmatrix} 

dst = cv2.GaussianBlur(img,(5,5),0)

sigmaX常设置为0,此时权重 sigma = 0.3*((ksize-1)*0.5-1)+0.8

2.4中值滤波

中值滤波的原理也很简单,就是用核中几个元素中的中间值来代替中间的像素值。

dst = cv2.medianBlur(img,(5,5))

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值