【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)
相关推荐
HIT_Weston2 分钟前
80、【Agent】【OpenCode】bash 工具提示词(专用工具)
人工智能·agent·opencode
深度森林4 分钟前
医学应用“手术机器人导航”高价值专利案例:基于计算机视觉的临床手术机器人导航规划方法
人工智能·计算机视觉·机器人
许彰午6 分钟前
# OCR与语音识别——政务AI的两个实用场景
人工智能·ocr·语音识别
xixixi777776 分钟前
《机密计算破局政务金融、截图工具漏洞泄露NTLM哈希、智能体仿冒日增200+:AI安全的三场“攻防战”》
人工智能·安全·ai·金融·大模型·政务·合规
技术路线图10 分钟前
教学智慧的数字围城:当专业积累遭遇人工智能认知屏蔽
人工智能·搜索引擎
广州创科水利11 分钟前
广州创科:以硬核科技与全栈能力,守护边坡安全监测防线
大数据·网络·人工智能
kishu_iOS&AI12 分钟前
NLP - Transformer原理解析
人工智能·自然语言处理·transformer
啦啦啦_999914 分钟前
2. PyTorch框架
人工智能·pytorch·python
木雷坞14 分钟前
AI Coding Agent 工具链部署:MCP Server、Docker Gateway 和镜像预检
人工智能·容器
ZPC821019 分钟前
识别物体 3D 位置 + 自动生成机器人抓取位姿」
数码相机·yolo·计算机视觉