【OpenCV】(六)—— 阈值处理

阈值处理(Thresholding)用于将灰度图像转换为二值图像。通过设定一个或多个阈值,可以将图像中的像素分为不同的类别,通常用于分割前景和背景、简化图像、去除噪声等任务。OpenCV 提供了多种阈值处理方法,下面介绍基本阈值处理和自动阈值处理。

基本阈值处理

基本阈值处理方法cv2.threshold,函数原型如下:

ret, thresh = cv2.threshold(src, thresh, maxval, type)

参数说明:

  • src:输入图像,通常是单通道的灰度图像。
  • thresh:阈值。
  • maxval:超过或低于阈值时赋予的新值。
  • type:阈值类型,常见的有以下几种:
    • cv2.THRESH_BINARY:如果像素值大于阈值,设置为 maxval;否则设置为 0。
    • cv2.THRESH_BINARY_INV:如果像素值大于阈值,设置为 0;否则设置为 maxval
    • cv2.THRESH_TRUNC:如果像素值大于阈值,设置为阈值;否则保持不变。
    • cv2.THRESH_TOZERO:如果像素值大于阈值,保持不变;否则设置为 0。
    • cv2.THRESH_TOZERO_INV:如果像素值大于阈值,设置为 0;否则保持不变。

【示例】

py 复制代码
import matplotlib.pyplot as plt
img = cv2.imread('cat.jpg',0)
# 阈值处理只接收一个通道的数据
ret, thresh1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY)
ret, thresh2 = cv2.threshold(img,127,255,cv2.THRESH_BINARY_INV)
ret, thresh3 = cv2.threshold(img,127,255,cv2.THRESH_TRUNC)
ret, thresh4 = cv2.threshold(img,127,255,cv2.THRESH_TOZERO)
ret, thresh5 = cv2.threshold(img,127,255,cv2.THRESH_TOZERO_INV)

titles = ['Orininal Image','BINARY','BINARY_INV','TRUNC','TOZERO','TOZERO_INV']
images =[img,thresh1,thresh2,thresh3,thresh4,thresh5]

for i in range(6):
    plt.subplot(2,3,i+1), plt.imshow(images[i],'gray')
    plt.title(titles[i])
    plt.xticks([]),plt.yticks([])

print(ret)

运行结果:

自动阈值处理

自适应阈值处理适用于图像中光照不均匀或背景复杂的情况。它会根据图像的局部区域自动计算阈值。

cv2.adaptiveThreshold 函数原型如下:

thresh = cv2.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C)

参数说明:

  • src:输入图像,通常是单通道的灰度图像。
  • maxValue:超过或低于阈值时赋予的新值。
  • adaptiveMethod:自适应方法,常见的有:
    • cv2.ADAPTIVE_THRESH_MEAN_C:阈值是邻域的平均值减去常数 C
    • cv2.ADAPTIVE_THRESH_GAUSSIAN_C:阈值是邻域的加权平均值减去常数 C
  • thresholdType:阈值类型,通常使用 cv2.THRESH_BINARYcv2.THRESH_BINARY_INV
  • blockSize:邻域大小,必须是奇数。
  • C:从平均值或加权平均值中减去的常数。

【示例】

py 复制代码
# 自动阈值处理
# 读取图像并转换为灰度图像
img = cv2.imread('cat.jpg', cv2.IMREAD_GRAYSCALE)

# 应用自适应阈值处理
adaptive_mean = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)
adaptive_gaussian = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)

# 显示结果
cv2.imshow('Adaptive Mean Thresholding', adaptive_mean)
cv2.imshow('Adaptive Gaussian Thresholding', adaptive_gaussian)

cv2.waitKey(0)
相关推荐
volcanical6 分钟前
Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena
人工智能·自然语言处理·机器翻译
大知闲闲哟8 分钟前
深度学习J6周 ResNeXt-50实战解析
人工智能·深度学习
静静AI学堂1 小时前
Yolo11改策略:卷积改进|SAC,提升模型对小目标和遮挡目标的检测性能|即插即用
人工智能·深度学习·目标跟踪
dundunmm1 小时前
机器学习之PCA降维
机器学习·信息可视化·数据挖掘·数据分析
martian6651 小时前
【人工智能离散数学基础】——深入详解数理逻辑:理解基础逻辑概念,支持推理和决策系统
人工智能·数理逻辑·推理·决策系统
Schwertlilien1 小时前
图像处理-Ch7-图像金字塔和其他变换
图像处理·人工智能
凡人的AI工具箱1 小时前
每天40分玩转Django:Django类视图
数据库·人工智能·后端·python·django·sqlite
千天夜1 小时前
深度学习中的残差网络、加权残差连接(WRC)与跨阶段部分连接(CSP)详解
网络·人工智能·深度学习·神经网络·yolo·机器学习
一勺汤1 小时前
YOLOv8模型改进 第二十五讲 添加基于卷积调制(Convolution based Attention) 替换自注意力机制
深度学习·yolo·计算机视觉·模块·yolov8·yolov8改进·魔改
凡人的AI工具箱1 小时前
每天40分玩转Django:实操图片分享社区
数据库·人工智能·后端·python·django