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

OpenCV 开发 -- 图像阈值处理


文章目录

    • @[toc]
    • 1 基本概念
    • 2 简单阈值处理`cv2.threshold`
    • 3 自适应阈值处理`cv2.adaptiveThreshold`

更多精彩内容
👉内容导航 👈
👉OpenCV开发 👈

1 基本概念

图像阈值处理(Thresholding)是图像处理中的一种基本技术,用于将灰度图像转换为二值图像。通过设定一个阈值,将图像中的像素分为两类:高于阈值的像素和低于阈值的像素。

使用场景

  • 文档图像二值化
  • 图像分割预处理
  • OCR 前处理
  • 去除图像噪声
  • 目标检测预处理

2 简单阈值处理cv2.threshold

cv2.threshold

输入图像:必须为单通道,若为彩色图像需先转换为灰度

函数定义

retval, dst = cv2.threshold(src, thresh, maxval, type)

参数详解

  1. src(输入图像)

    • 类型:单通道灰度图像(如 cv2.COLOR_BGR2GRAY 转换后的图像)。
    • 作用:待处理的输入图像,必须为 8-bit32-bit 浮点型
  2. thresh(阈值)

    • 类型floatint
    • 作用:用于与像素值比较的阈值。若像素值大于 thresh,则根据 type 参数处理。
  3. maxval(最大值)

    • 类型floatint
    • 作用:当像素值满足阈值条件时,赋予的新值(仅对部分 type 有效)。
  4. type(阈值类型)

    • 类型:枚举值,决定二值化逻辑。常用选项:

      • cv2.THRESH_BINARY:像素值 > thresh → 设为 maxval,否则设为 0
      • cv2.THRESH_BINARY_INV:像素值 > thresh → 设为 0,否则设为 maxval
      • cv2.THRESH_TRUNC:像素值 > thresh → 截断为 thresh,否则保留原值。
      • cv2.THRESH_TOZERO:像素值 > thresh → 保留原值,否则设为 0
      • cv2.THRESH_TOZERO_INV:像素值 > thresh → 设为 0,否则保留原值。
      • cv2.THRESH_OTSU(需与上述类型组合使用,如 cv2.THRESH_BINARY + cv2.THRESH_OTSU):自动计算最佳阈值(忽略手动设置的 thresh)。

返回值

  • retval:实际使用的阈值。若使用 cv2.THRESH_OTSU,返回自动计算的阈值。
  • dst:处理后的二值化图像。

使用场景

  1. 图像二值化:最常见的使用场景之一。通过设定一个阈值,将图像转换为仅包含黑白两种颜色的二值图像。这对于后续的图像处理步骤(如边缘检测、轮廓提取等)非常有用。
  2. 背景消除:通过阈值处理,可以将图像中的背景部分与前景部分区分开来,便于提取感兴趣的目标。这对于机器视觉任务(如物体识别、跟踪等)至关重要。
  3. 图像分割:利用阈值处理可以对图像进行分割,将图像中具有相似像素值的区域分隔出来。这有助于进一步分析图像中的各个部分。
  4. 特征提取:在某些情况下,阈值处理可以用于提取图像中的某些特定特征,比如颜色特征、纹理特征等。这对于图像分析和模式识别非常有用。
  5. 减少噪声:通过阈值处理,可以将一些小的噪声区域从图像中去除,从而提高图像质量。这通常与形态学操作结合使用,以达到更好的效果。
  6. 图像增强:在某些情况下,阈值处理也可以用于增强图像的某些部分,例如通过调整阈值来增加图像的对比度。
  7. 自动阈值确定:使用 cv2.THRESH_OTSUcv2.THRESH_TRIANGLE 参数,可以让函数自动确定阈值,适用于那些难以手动设定阈值的情况。
  8. 图像预处理:在进行其他复杂的图像处理操作之前,通常会对图像进行预处理,其中阈值处理是一个重要的步骤。它可以简化后续处理的复杂度,并提高处理效果。
  9. 图像阈值化跟踪:在视频处理中,阈值处理可以用来跟踪特定的物体或区域。通过动态调整阈值,可以适应不同的光照条件和背景变化。

3 自适应阈值处理cv2.adaptiveThreshold

OpenCV 中用于自适应阈值化的函数,特别适用于光照不均或背景复杂的图像二值化场景:


adaptiveThreshold

函数定义

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

参数详解

  1. src(输入图像)

    • 类型:必须为 8-bit 单通道灰度图像(如 cv2.COLOR_BGR2GRAY 转换后的图像)。
    • 作用:待处理的输入图像,不接受浮点型或多通道图像。
  2. maxValue(最大值)

    • 类型intfloat
    • 作用:当像素值满足阈值条件时,赋予的新值(通常为 255)。
  3. adaptiveMethod(自适应方法)

    • 类型:枚举值,决定如何计算局部阈值。可选:

      • cv2.ADAPTIVE_THRESH_MEAN_C:基于邻域块的均值计算阈值(T = 均值 - C)。
    • cv2.ADAPTIVE_THRESH_GAUSSIAN_C:基于邻域块的高斯加权均值计算阈值(T = 高斯加权均值 - C)。

  4. thresholdType(阈值类型)

    • 类型:枚举值,仅支持两种模式:

      • cv2.THRESH_BINARY:像素值 > 阈值 → 设为 maxValue,否则设为 0。
    • cv2.THRESH_BINARY_INV:像素值 > 阈值 → 设为 0,否则设为 maxValue

  5. blockSize(邻域块大小)

    • 类型奇数(如 3, 5, 7)。
    • 作用:计算局部阈值的邻域窗口尺寸,越大越能平滑噪声,但可能丢失细节。
  6. C(常数偏移)

    • 类型intfloat
    • 作用:从计算的阈值中减去的常数,用于微调阈值敏感度(通常取正值降低阈值)。

返回值

  • dst:处理后的二值化图像,尺寸与 src 相同。

注意事项

  1. 输入限制:必须为 8-bit 单通道灰度图像,否则报错。
  2. blockSize 奇偶性:必须为奇数,否则抛出 cv2.error
  3. 参数调优:
    • blockSize:值过小 → 噪声敏感;值过大 → 细节丢失。
    • C 值:正值降低阈值(更易将像素设为 maxValue),负值提高阈值。
  4. 性能:比全局阈值 cv2.threshold 计算开销更大。
  5. 对比全局阈值:
    • 优点:适应局部亮度变化。
    • 缺点:无法处理全局对比度极低的图像(需结合其他预处理)。

使用示例

import numpy as np
import cv2img = cv2.imread('1.png')
img1 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 将图片转换为灰度图
img2 = cv2.adaptiveThreshold(img1,250,  # 设定阈值,越大越亮cv2.ADAPTIVE_THRESH_MEAN_C,  # 选择方法,这里选择均值cv2.THRESH_BINARY,  # 选择二值化方法3,  # 邻域大小, 越大越模糊, 奇数,通常为3或51) # C值,越大越亮,通常为1
cv2.imshow('image', img2)
cv2.waitKey(0)

示例效果
在这里插入图片描述




文章转载自:

http://umvulE9G.smjyk.cn
http://RJRzMzDN.smjyk.cn
http://0u2IFioH.smjyk.cn
http://G9NJe8Z5.smjyk.cn
http://TOy6ZIit.smjyk.cn
http://ih4jWjF1.smjyk.cn
http://77W7yri8.smjyk.cn
http://fm0BE8Au.smjyk.cn
http://juthAE61.smjyk.cn
http://fVCkYhc9.smjyk.cn
http://7Yv583Lb.smjyk.cn
http://v78O661C.smjyk.cn
http://iq3g8Ppl.smjyk.cn
http://vXGIHJeB.smjyk.cn
http://NKkJPTbf.smjyk.cn
http://lxn28mvY.smjyk.cn
http://ZTKTt9ic.smjyk.cn
http://LqlgJTml.smjyk.cn
http://Fq6tRONm.smjyk.cn
http://35E50vOG.smjyk.cn
http://qBoZMPw7.smjyk.cn
http://44cXI98T.smjyk.cn
http://BLstX20o.smjyk.cn
http://thmHtvmr.smjyk.cn
http://YO7LfF9C.smjyk.cn
http://Gk8vEcUP.smjyk.cn
http://dqcQSi6n.smjyk.cn
http://fwQlF1r5.smjyk.cn
http://VHhzoi3i.smjyk.cn
http://0wgHM0Al.smjyk.cn
http://www.dtcms.com/a/377953.html

相关文章:

  • [Ubuntu][mount]ubuntu电脑挂载新硬盘
  • Maven中optional的作用
  • 使用pdfjs-dist 预览pdf,并添加文本层的实现
  • 操作系统应用开发(五)智能浏览器开发——东方仙盟元婴期
  • 蓝桥杯算法之基础知识(7)---排序题的快排和归并排序
  • leetcode-python-2154将找到的值乘以 2
  • Nginx 实战系列(十)—— LVS+Keepalived 高可用集群技术详解
  • C++ 前缀积 高频笔试考点 实用技巧 力扣 238.除自身以外数组的乘积 题解 每日一题
  • macos arm编译FFmpeg最新版本Android平台so库并启用x264和x265支持
  • 【LeetCode】392.判断子序列
  • StreamCap(直播录制) v1.0.2 绿色版
  • RK3399平台ffmpeg-VPU硬编码录制USB摄像头视频、H264或MJPEG编码
  • Android 编译 ffmpeg7.1.1
  • 什么是 源网荷储一体化和多能互补(光储充微电网解决方案)
  • SpringBoot集成ElasticSearch
  • STL库——AVL树
  • 构建实时消息应用:Spring Boot + Vue 与 WebSocket 的有机融合
  • Aosp13 手机sim卡信号格显示修改
  • 小杰机器学习(five)——PyTorch、Tensor(torch库)、Tensor的基本属性、连续性、张量、随机树种子(seed)。
  • ARM 架构的异常模型(Exception Model)
  • 深度学习——基于 PyTorch 的 CBOW 模型实现自然语言处理
  • Spring Cloud Alibaba快速入门03-OpenFeign进阶用法
  • 【PyTorch】多对象分割
  • npm : 无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚
  • NodeJS 8 ,从 0 到 1:npm 包发布与更新全流程指南( 含多场景适配与踩坑总结 )
  • Debian 系统上安装与配置 MediaMTX
  • 【PyTorch训练】准确率计算(代码片段拆解)
  • 【Linux】线程池——详细讲解
  • Linux epoll 机制的核心控制函数——`epoll_ctl`
  • 粒子群优化(PSO)算法详解:从鸟群行为到强大优化工具