自适应阈值

自适应阈值:

​ 当同一幅图像上的不同部分的具有<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()

输出结果:

14657665-16ec3747cbc13c53.png
自适应阈值.png
发布了82 篇原创文章 · 获赞 39 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq_28368377/article/details/104492515
今日推荐