OpenCV 中如何进行图像的二值化?

· 约 3 分钟读完 · 第 42 / 144 章

推荐答案

在OpenCV中,图像的二值化可以通过cv2.threshold()函数来实现。以下是一个简单的示例代码:

在这个示例中,cv2.threshold()函数将灰度图像转换为二值图像。127是阈值,255是最大值,cv2.THRESH_BINARY是二值化的类型。

本题详细解读

1. cv2.threshold()函数详解

cv2.threshold()函数的原型如下:

  • src: 输入图像,通常是灰度图像。
  • thresh: 阈值,用于将像素值分类。
  • maxval: 当像素值超过(或小于,取决于类型)阈值时,赋予的新值。
  • type: 二值化类型,常用的有:
    • cv2.THRESH_BINARY: 如果像素值大于阈值,则赋予maxval,否则赋予0。
    • cv2.THRESH_BINARY_INV: 与cv2.THRESH_BINARY相反。
    • cv2.THRESH_TRUNC: 如果像素值大于阈值,则赋予阈值,否则保持不变。
    • cv2.THRESH_TOZERO: 如果像素值大于阈值,则保持不变,否则赋予0。
    • cv2.THRESH_TOZERO_INV: 与cv2.THRESH_TOZERO相反。

2. 二值化的应用场景

二值化常用于图像处理中的以下场景:

  • 图像分割:将图像中的前景和背景分离。
  • 边缘检测:通过二值化可以更容易地检测到图像的边缘。
  • 字符识别:在OCR(光学字符识别)中,二值化可以帮助提取字符。

3. 自适应阈值

在某些情况下,全局阈值可能不适用,此时可以使用自适应阈值。OpenCV提供了cv2.adaptiveThreshold()函数:

  • cv2.ADAPTIVE_THRESH_MEAN_C: 使用邻域均值作为阈值。
  • cv2.ADAPTIVE_THRESH_GAUSSIAN_C: 使用邻域加权和(高斯核)作为阈值。
  • 11: 邻域大小。
  • 2: 常数,从均值或加权和中减去。

自适应阈值适用于光照不均匀的图像。