自适应阈值

作者: 陨星落云 | 来源:发表于2020-02-24 13:12 被阅读0次

    自适应阈值:

    ​ 当同一幅图像上的不同部分的具有<u>不同亮度</u>时。这种情况下我们需要采用自适应阈值。此时的阈值是根据图像上的每一个小区域计算与其对应的阈值。因此在同一幅图像上的不同区域采用的是不同的阈值,从而使我们能在亮度不同的情况下得到更好的结果。

    cv2.adaptiveThreshold(src,x,adaptive_method, threshold_type,block_size,param1)
    

    参数:

    src:指原图像,原图像应该是灰度图。

    x :指当像素值高于(有时是小于)阈值时应该被赋予的新的像素值

    adaptive_methodCV_ADAPTIVE_THRESH_MEAN_CCV_ADAPTIVE_THRESH_GAUSSIAN_C

    threshold_type : 指取阈值类型:

    ​ 必须是 CV_THRESH_BINARY, CV_THRESH_BINARY_INV

    block_size: 指用来计算阈值的象素邻域大小: 3, 5, 7, ...

    param1 :指与方法有关的参数。对方法CV_ADAPTIVE_THRESH_MEAN_CCV_ADAPTIVE_THRESH_GAUSSIAN_C, 它是一个从均值或加权均值提取的常数, 尽管它可以是负数。

    自适应阈值:

    • 对方法CV_ADAPTIVE_THRESH_MEAN_C,先求出块中的均值,再减掉param1
    • 对方法 CV_ADAPTIVE_THRESH_GAUSSIAN_C ,先求出块中的加权和(gaussian), 再减掉param1

    例:

    import cv2
    import numpy as np
    import  matplotlib.pyplot as plt
    img = cv2.imread("text1.png",0)
    
    # img = cv2.resize(img,(0,0),fx=0.5,fy=0.5)
    # 全局阈值
    (t,thresh) = cv2.threshold(img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
    # 自适应阈值
    thresh0 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,5,4)
    thresh1 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,5,4)
    
    plt.figure(figsize=(8,10))
    plt.subplot(221)
    plt.imshow(img,cmap="gray")
    plt.xlabel("原图",fontproperties='SimHei')
    plt.subplot(222)
    plt.imshow(thresh,cmap="gray")
    plt.xlabel("OTSU阈值",fontproperties='SimHei')
    plt.subplot(223)
    plt.imshow(thresh0,cmap="gray")
    plt.xlabel("自适应高斯阈值",fontproperties='SimHei')
    plt.subplot(224)
    plt.imshow(thresh1,cmap="gray")
    plt.xlabel("自适应均值阈值",fontproperties='SimHei')
    plt.show()
    

    输出结果:

    自适应阈值.png

    相关文章

      网友评论

        本文标题:自适应阈值

        本文链接:https://www.haomeiwen.com/subject/sqtvqhtx.html