一、阈值处理:图像分割的基石
1.1 什么是阈值处理?
阈值处理(Thresholding)是将灰度图像转换为二值图像的核心技术。其核心思想是通过设定临界值(Threshold)将像素分为两类:
- 前景(Foreground):目标物体(通常赋值为255)
- 背景(Background):非目标区域(通常赋值为0)
数学表达式为:
dst(x,y)={
maxValif src(x,y)>thresh0otherwise dst(x,y) = \begin{cases} maxVal & \text{if } src(x,y) > thresh \\ 0 & \text{otherwise} \end{cases} dst(x,y)={
maxVal0if src(x,y)>threshotherwise
1.2 应用场景
领域 | 典型应用 |
---|---|
文档处理 | 纸质文档数字化、印刷体文字识别 |
工业检测 | 零件缺陷检测、产品计数 |
生物医学 | 细胞分割、X光片分析 |
自动驾驶 | 车道线检测、交通标志识别 |
二、全局阈值处理详解
2.1 核心函数原理
OpenCV提供cv2.threshold()
函数实现全局阈值处理:
retval, dst = cv2.threshold(
src, # 输入图像(必须为单通道)
thresh, # 阈值(0-255)
maxval, # 最大值(通常为255)
type # 阈值类型
)
2.2 6种阈值类型对比
类型 | 公式 |
---|---|
THRESH_BINARY |
dst={ maxvalif src>thresh0elsedst = \begin{cases} maxval & \text{if } src > thresh \\ 0 & \text{else} \end{cases}dst={ maxval0if src>threshelse |
THRESH_BINARY_INV |
与BINARY相反 |
THRESH_TRUNC |
dst={ threshif src>threshsrcelsedst = \begin{cases} thresh & \text{if } src > thresh \\ src & \text{else} \end{cases}dst={ threshsrcif src>threshelse |
THRESH_TOZERO |
dst={ srcif src>thresh0elsedst = \begin{cases} src & \text{if } src > thresh \\ 0 & \text{else} \end{cases}dst={ src0 |