### 文章目录
- [@[toc]](#文章目录 @[toc] 1 基本概念 2 简单阈值处理
cv2.threshold
3 自适应阈值处理cv2.adaptiveThreshold
) - [1 基本概念](#文章目录 @[toc] 1 基本概念 2 简单阈值处理
cv2.threshold
3 自适应阈值处理cv2.adaptiveThreshold
) - [2 简单阈值处理`cv2.threshold`](#文章目录 @[toc] 1 基本概念 2 简单阈值处理
cv2.threshold
3 自适应阈值处理cv2.adaptiveThreshold
) - [3 自适应阈值处理`cv2.adaptiveThreshold`](#文章目录 @[toc] 1 基本概念 2 简单阈值处理
cv2.threshold
3 自适应阈值处理cv2.adaptiveThreshold
)
更多精彩内容 |
---|
👉内容导航 👈 |
👉OpenCV开发 👈 |
1 基本概念
图像阈值处理(Thresholding)是图像处理中的一种基本技术,用于将灰度图像转换为二值图像。通过设定一个阈值,将图像中的像素分为两类:高于阈值的像素和低于阈值的像素。
使用场景
- 文档图像二值化
- 图像分割预处理
- OCR 前处理
- 去除图像噪声
- 目标检测预处理
2 简单阈值处理cv2.threshold
输入图像:必须为单通道,若为彩色图像需先转换为灰度
函数定义
python
retval, dst = cv2.threshold(src, thresh, maxval, type)
参数详解
-
src
(输入图像)- 类型 :单通道灰度图像(如
cv2.COLOR_BGR2GRAY
转换后的图像)。 - 作用 :待处理的输入图像,必须为 8-bit 或 32-bit 浮点型。
- 类型 :单通道灰度图像(如
-
thresh
(阈值)- 类型 :
float
或int
。 - 作用 :用于与像素值比较的阈值。若像素值大于
thresh
,则根据type
参数处理。
- 类型 :
-
maxval
(最大值)- 类型 :
float
或int
。 - 作用 :当像素值满足阈值条件时,赋予的新值(仅对部分
type
有效)。
- 类型 :
-
type
(阈值类型)-
类型:枚举值,决定二值化逻辑。常用选项:
cv2.THRESH_BINARY
:像素值 >thresh
→ 设为maxval
,否则设为0
。cv2.THRESH_BINARY_INV
:像素值 >thresh
→ 设为0
,否则设为maxval
。cv2.THRESH_TRUNC
:像素值 >thresh
→ 截断为thresh
,否则保留原值。cv2.THRESH_TOZERO
:像素值 >thresh
→ 保留原值,否则设为0
。cv2.THRESH_TOZERO_INV
:像素值 >thresh
→ 设为0
,否则保留原值。cv2.THRESH_OTSU
(需与上述类型组合使用,如cv2.THRESH_BINARY + cv2.THRESH_OTSU
):自动计算最佳阈值(忽略手动设置的thresh
)。
-
返回值
retval
:实际使用的阈值。若使用cv2.THRESH_OTSU
,返回自动计算的阈值。dst
:处理后的二值化图像。
使用场景
- 图像二值化:最常见的使用场景之一。通过设定一个阈值,将图像转换为仅包含黑白两种颜色的二值图像。这对于后续的图像处理步骤(如边缘检测、轮廓提取等)非常有用。
- 背景消除:通过阈值处理,可以将图像中的背景部分与前景部分区分开来,便于提取感兴趣的目标。这对于机器视觉任务(如物体识别、跟踪等)至关重要。
- 图像分割:利用阈值处理可以对图像进行分割,将图像中具有相似像素值的区域分隔出来。这有助于进一步分析图像中的各个部分。
- 特征提取:在某些情况下,阈值处理可以用于提取图像中的某些特定特征,比如颜色特征、纹理特征等。这对于图像分析和模式识别非常有用。
- 减少噪声:通过阈值处理,可以将一些小的噪声区域从图像中去除,从而提高图像质量。这通常与形态学操作结合使用,以达到更好的效果。
- 图像增强:在某些情况下,阈值处理也可以用于增强图像的某些部分,例如通过调整阈值来增加图像的对比度。
- 自动阈值确定 :使用
cv2.THRESH_OTSU
或cv2.THRESH_TRIANGLE
参数,可以让函数自动确定阈值,适用于那些难以手动设定阈值的情况。 - 图像预处理:在进行其他复杂的图像处理操作之前,通常会对图像进行预处理,其中阈值处理是一个重要的步骤。它可以简化后续处理的复杂度,并提高处理效果。
- 图像阈值化跟踪:在视频处理中,阈值处理可以用来跟踪特定的物体或区域。通过动态调整阈值,可以适应不同的光照条件和背景变化。
3 自适应阈值处理cv2.adaptiveThreshold
OpenCV 中用于自适应阈值化的函数,特别适用于光照不均或背景复杂的图像二值化场景:
函数定义
python
dst = cv2.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C)
参数详解
-
src
(输入图像)- 类型 :必须为 8-bit 单通道灰度图像 (如
cv2.COLOR_BGR2GRAY
转换后的图像)。 - 作用:待处理的输入图像,不接受浮点型或多通道图像。
- 类型 :必须为 8-bit 单通道灰度图像 (如
-
maxValue
(最大值)- 类型 :
int
或float
。 - 作用:当像素值满足阈值条件时,赋予的新值(通常为 255)。
- 类型 :
-
adaptiveMethod
(自适应方法)-
类型:枚举值,决定如何计算局部阈值。可选:
cv2.ADAPTIVE_THRESH_MEAN_C
:基于邻域块的均值 计算阈值(T = 均值 - C
)。
-
cv2.ADAPTIVE_THRESH_GAUSSIAN_C
:基于邻域块的高斯加权均值 计算阈值(T = 高斯加权均值 - C
)。
-
-
thresholdType
(阈值类型)-
类型:枚举值,仅支持两种模式:
cv2.THRESH_BINARY
:像素值 > 阈值 → 设为maxValue
,否则设为 0。
-
cv2.THRESH_BINARY_INV
:像素值 > 阈值 → 设为 0,否则设为maxValue
。
-
-
blockSize
(邻域块大小)- 类型 :奇数(如 3, 5, 7)。
- 作用:计算局部阈值的邻域窗口尺寸,越大越能平滑噪声,但可能丢失细节。
-
C
(常数偏移)- 类型 :
int
或float
。 - 作用:从计算的阈值中减去的常数,用于微调阈值敏感度(通常取正值降低阈值)。
- 类型 :
返回值
dst
:处理后的二值化图像,尺寸与src
相同。
注意事项
- 输入限制 :必须为 8-bit 单通道灰度图像,否则报错。
- blockSize 奇偶性 :必须为奇数,否则抛出
cv2.error
。 - 参数调优:
- blockSize:值过小 → 噪声敏感;值过大 → 细节丢失。
- C 值 :正值降低阈值(更易将像素设为
maxValue
),负值提高阈值。
- 性能 :比全局阈值
cv2.threshold
计算开销更大。 - 对比全局阈值:
- 优点:适应局部亮度变化。
- 缺点:无法处理全局对比度极低的图像(需结合其他预处理)。
使用示例
python
import numpy as np
import cv2
img = cv2.imread('1.png')
img1 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 将图片转换为灰度图
img2 = cv2.adaptiveThreshold(img1,
250, # 设定阈值,越大越亮
cv2.ADAPTIVE_THRESH_MEAN_C, # 选择方法,这里选择均值
cv2.THRESH_BINARY, # 选择二值化方法
3, # 邻域大小, 越大越模糊, 奇数,通常为3或5
1) # C值,越大越亮,通常为1
cv2.imshow('image', img2)
cv2.waitKey(0)
示例效果