【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)
相关推荐
Caaacy_YU30 分钟前
多模态大模型研究每日简报【2025-08-21】
论文阅读·人工智能·机器学习·计算机视觉
画中有画35 分钟前
使用AI来实现拼多多自动化运营脚本
运维·人工智能·自动化·ai编程·rpa·自动化脚本
钮钴禄·爱因斯晨37 分钟前
AIGC浪潮下,风靡全球的Mcp到底是什么?一文讲懂,技术小白都知道!!
开发语言·人工智能·深度学习·神经网络·生成对抗网络·aigc
大模型真好玩38 分钟前
深入浅出LangChain AI Agent智能体开发教程(九)—LangChain从0到1搭建知识库
人工智能·python·mcp
xcLeigh1 小时前
文心一言4.5开源模型实战:ERNIE-4.5-0.3B轻量化部署与效能突破
人工智能·开源·大模型·文心一言·ernie·轻量化部署
居7然2 小时前
解锁工业级Prompt设计,打造高准确率AI应用
人工智能·prompt·提示词
星期天要睡觉2 小时前
机器学习——网格搜索(GridSearchCV)超参数优化
人工智能·机器学习
元宇宙时间5 小时前
RWA加密金融高峰论坛&星链品牌全球发布 —— 稳定币与Web3的香港新篇章
人工智能·web3·区块链
天涯海风8 小时前
检索增强生成(RAG) 缓存增强生成(CAG) 生成中检索(RICHES) 知识库增强语言模型(KBLAM)
人工智能·缓存·语言模型
lxmyzzs9 小时前
基于深度学习CenterPoint的3D目标检测部署实战
人工智能·深度学习·目标检测·自动驾驶·ros·激光雷达·3d目标检测