OpenCV-29 自适应阈值二值化

一、引入

        在前面的部分我们使用的是全局阈值,整幅图像采用同一个数作为阈值。当时这种方法并不适应于所有情况。尤其是当同一幅图像上的不同部分具有不同的亮度时。这种情况下我们需要采用自适应阈值。此时的阈值时根据图像上的每一个小区域计算与其对应的阈值。因此在同一幅图像上的不同区域采用不同的阈值,从而使我们能在亮度不同的情况下得到更好的结果。

二、在OpenCV中的使用

        使用API --- adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C, dst = None)

(这种方法我们需要指定六个参数,返回值只有一个)

  • Adaptive Method- 指定计算阈值的方法

       - cv2.ADPTIVE_THRESH_MEAN_C:阈值取自相邻区域的平均值

       - cv2.ADPTIVE_THRESH_GAUSSIAN_C:阈值取自相邻区域的加权值,权重为一个高斯窗口。

  • Block Size - 邻域大小(用于计算阈值的区域大小)为常数
  • C - 常数,阈值等于平均值或加权平均值减去这个常数。

示例代码如下:

import cv2
import numpy as np

img = cv2.imread("beautiful women.png")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
dst = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 3, 0)
cv2.imshow("img", np.hstack((gray, dst)))

cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果如下:

你可能感兴趣的:(OpenCV,opencv,人工智能,计算机视觉,numpy,python)