OpenCV——图像运算

文章素材来源© Fu Xianjun. All Rights Reserved.

知识定义:阈值处理,指剔除图像内像素值高于一定值或者低于一定值的像素点

例如,设定阈值为127,然后

          将图像内所有像素值大于180的像素点的值设为255

          将图像内所有像素值小于或等于180的像素点的值设为0

import cv2
img = cv2.imread("peppa.jpg",0)
h,w = img.shape
for i in range(h):
    for j in range(w):
        if img[i,j]<180:
            img[i,j]=0
        else:
            img[i,j]=255
cv2.imshow("binary",img)
cv2.waitKey(0)
cv2.destroyAllWindows()

这是一只佩奇 

OpenCV——图像运算_第1张图片

当她被阈值处理之后,她就成了这样

OpenCV——图像运算_第2张图片

像素值大于180的像素上调为255---白色

像素值小于180的像素下调为0------黑色

这种阈值处理也叫二值化

除了二值化处理之外,还有几种处理

OpenCV——图像运算_第3张图片

这是他们的处理结果

OpenCV——图像运算_第4张图片

OpenCV提供了函数cv2.threshold()--(阈值处理函数)和cv2.adaptiveThreshold()--(自适应阈值处理函数), 用于实现阈值处理。

阈值处理还有一种用法叫自适应阈值处理

定义:使用变化的阈值完成对图像的阈值处理。

通过计算每个像素点周围临近区域的加权平均值获得阈值,并使用该阈值对当前像素点进行处理。

 这样做可以保留图片的更多细节OpenCV——图像运算_第5张图片

知识定义:平滑处理

平滑处理又分为很多种

  • 均值滤波    

  • 方框滤波

  • 高斯滤波

  • 中值滤波

  • 双边滤波

  • 2D卷积    

均值滤波--定义:是指用当前像素点周围N*N个像素值的均值来代替当前像素值。

dst=cv2.blursrc,ksize,anchor,borderType

        ksize:滤波核的大小。滤波核大小是指在均值处理过程中,其邻域图像的高度和宽度。

        anchor:锚点,其默认值是(-1,-1),表示当前计算均值的点位于核的中心点位置。

        borderType:边界样式,该值决定了以何种方式处理边界。

通常情况下,使用均值滤波函数时,对于锚点anchor和边界样式borderType,直接采用其默认值即可。因此,函数cv2.blur()的一般形式为:

        dst=cv2.blur(src,ksize,)。缺点在于它不能很好地保护图像细节,在图像去噪的同时也破坏了图像的细节部分,从而使图像变得模糊,不能很好地去除噪声点。

方框滤波--定义:自由选择是否对均值滤波的结果进行归一化,即可以自由选择滤波结果是邻域像素值之和的平均值,还是邻域像素值之和

cv2.boxFiltersrc,ddepth,ksize,anchor,normalize,borderType

       

        ddepth是处理结果图像的图像深度,一般使用-1表示与原始图像使用相同的图像深度。

        normalize 表示在滤波时是否进行归一化(这里指将计算结果规范化为当前像素值范围内          的值)处理,该参数是一个逻辑值,可能为真(值为1)或假(值为0)。

通常情况下,函数cv2.boxFilter()的一般形式为:

        dst=cv2.boxFilter(src,ddepth,ksize

高斯滤波--定义:将中心点的权重值加大,远离中心点的权重值减小,在此基础上计算邻域内各个像素值不同权重的和。

dst=cv2.GaussianBlursrc,ksize,sigmaX,sigmaY,borderType

        sigmaX 是卷积核在水平方向上(X 轴方向)的标准差,其控制的是权重比例。

        sigmaY是卷积核在垂直方向上(Y轴方向)的标准差。

在实际处理中,可以显式指定sigmaXsigmaY为默认值0。因此,函数cv2.GaussianBlur()的常用形式为:

        dst=cv2.GaussianBlur(src,ksize,0,0),高斯滤波的作用是消除高斯噪声(抑制服从正态分布的噪声)

中值滤波--定义:用邻域内所有像素值的中间值来替代当前像素点的像素值。

        dst=cv2.medianBlursrc,ksize

该方法在去除脉冲噪声、椒盐噪声的同时又能保留图像边缘细节

双边滤波--定义:是综合考虑空间信息和色彩信息的滤波方式,在滤波过程中能够有效地保护图像内的边缘信息。

cv2.bilateralFiltersrc,d,sigmaColor,sigmaSpace,borderType

        d:在滤波时选取的空间距离参数,这里表示以当前像素点为中心点的直径。如果该值为          非正数,则会自动从参数 sigmaSpace 计算得到。

        sigmaColor:滤波处理时选取的颜色差值范围,该值决定了周围哪些像素点能够参与到            滤波中来。

        sigmaSpace:坐标空间中的sigma值。

在函数cv2.bilateralFilter()中,参数borderType是可选参数,其余参数全部为必选参数。

        cv2.bilateralFilter(src,d,sigmaColor,sigmaSpace

 2D卷积--定义:使用特定的卷积核实现卷积操作。

dst=cv2.filter2Dsrc,ddepth,kernel,anchor,delta,borderType

        delta :修正值,它是可选项。如果该值存在,会在基础滤波的结果上加上该值作为最终          的滤波处理结果。

在通常情况下,使用滤波函数cv2.filter2D()时,对于参数锚点anchor、修正值delta、边界样式borderType,直接采用其默认值即可。因此,函数cv2.filter2D()的常用形式为:

        dst=cv2.filter2Dsrc,ddepth,kernel

你可能感兴趣的:(python,opencv)