当前位置: 首页 > news >正文

【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;否则保持不变。

【示例】

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:从平均值或加权平均值中减去的常数。

【示例】

# 自动阈值处理
# 读取图像并转换为灰度图像
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)

在这里插入图片描述

http://www.lryc.cn/news/460538.html

相关文章:

  • 重学SpringBoot3-集成Redis(九)之共享Session
  • Linux:信号保存与处理
  • 工具方法 - 可选的一些AI聊天机器人
  • YOLOv11改进策略【卷积层】| CVPR-2023 ScConv:即插即用,减少冗余计算并提升特征学习
  • 总结拓展十四:批次管理(2)
  • 架构设计笔记-18-安全架构设计理论与实践
  • Python网络爬虫
  • 38. 外观数列
  • Android中的三种数据存储方式
  • VS2022中Qt环境配置步骤
  • 【前端】 常用的版本控制符号汇总
  • OWASP Top 10 漏洞详解:基础知识、面试常问问题与实际应用
  • 实景三维赋能自然资源精细化管理创新
  • Science Robotics 通过新材料打造FiBa软机器人 可实现四种形态进化
  • C++ 的特性可以不用在主函数中调用
  • 香港大学神作 LightRAG 横空出世!AI 检索生成系统革命,秒懂复杂信息,动态数据无所遁形!
  • 云栖实录 | 智能运维年度重磅发布及大模型实践解读
  • Vue3中防止按钮重复点击的方式
  • windows主机重新安装zabbix agent提示please clear the previous agent registration
  • 一个将.Geojson文件转成shapefile和kml文件的在线页面工具
  • Mamba学习笔记(1)——原理基础
  • linux应用
  • 【千库网-注册安全分析报告】
  • 【LwIP源码学习3】TCP协议栈分析——数据接收流程
  • 【bug】finalshell向远程主机拖动windows快捷方式导致卡死
  • 基于SpringBoot剧本杀管理系统 【附源码】
  • Linux 命令 —— grep、tail、head、cat、more、less(查看日志常用命令)
  • 知识见闻 - 美国连线杂志
  • 多线程的状态及切换流程
  • [Python学习日记-47] Python 中的系统调用模块—— os 与 sys