OpenCV:二值化与自适应阈值

目录

简述

1. 什么是二值化

2. 二值化接口

2.1 参数说明​​​​​

2.2 示例代码

2.3 运行结果

3. 自适应阈值

3.1 参数说明

3.2 示例代码

3.3 运行结果

4. 总结

4.1 二值化

4.2 自适应阈值


相关阅读

OpenCV:图像的腐蚀与膨胀-CSDN博客


简述

图像二值化是图像处理中的基础操作,它将图像中的像素分为两类:前景和背景。二值化在很多图像分析任务中非常重要,如目标检测、形态学操作等。自适应阈值作为一种常用的阈值选择方法,可以根据图像局部的特性动态调整阈值,尤其适用于照明不均匀或噪声较多的图像。本文将详细介绍 OpenCV 中的二值化、自适应阈值以及相关接口的使用。


1. 什么是二值化

二值化是图像处理中一种简单的图像分割方法,其目标是将灰度图像转换成黑白图像。具体来说,它通过一个阈值将每个像素的灰度值与该阈值进行比较,如果像素值大于该阈值,则将其置为最大值(通常是 255);如果小于阈值,则将其置为最小值(通常是 0)。这样,图像就只有两种颜色:黑色和白色。

二值化的基本步骤:

  1. 将图像转换为灰度图像。
  2. 设置一个全局阈值,通常范围为 0 到 255。
  3. 根据阈值将图像分为两类:高于阈值的像素设置为白色(255),低于阈值的像素设置为黑色(0)。

2. 二值化接口

在 OpenCV 中,cv2.threshold 是实现二值化的函数。其基本语法如下:

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

2.1 参数说明​​​​​

  • src: 输入图像,必须是灰度图像。
  • thresh: 阈值,用于图像分割。
  • maxval: 高于阈值的像素值设置为 maxval。
  • type: 阈值类型,控制如何应用阈值,有多个选项:
cv2.THRESH_BINARY简单二值化,像素值大于阈值时为最大值,小于阈值时为 0。
cv2.THRESH_BINARY_INV与 cv2.THRESH_BINARY 相反。
cv2.THRESH_TRUNC大于阈值的像素被截断为阈值值。
cv2.THRESH_TOZERO大于阈值的像素保持不变,小于阈值的像素置为 0。
cv2.THRESH_TOZERO_INV与 cv2.THRESH_TOZERO 相反。

2.2 示例代码

import cv2
import numpy as np# 读取图像并转换为灰度图
image = cv2.imread('D:\\resource\\qt.jpg')
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 设置阈值和最大值
thresh_value = 127
max_value = 255# 进行二值化操作
_, binary_image = cv2.threshold(gray_image, thresh_value, max_value, cv2.THRESH_BINARY)# 显示结果
cv2.imshow('Image', image)
#cv2.imshow('Gray Image', gray_image)
cv2.imshow('Binary Image', binary_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

2.3 运行结果

说明:

  • 原始图像:灰度图像
  • 二值化结果:基于阈值 127 将图像转换为黑白图像。

3. 自适应阈值

在一些图像中,亮度和对比度可能在不同区域有很大变化,这使得使用全局阈值进行二值化变得不太有效。为了解决这个问题,OpenCV 提供了 自适应阈值 技术,它通过为每个像素选择局部阈值来进行二值化。

自适应阈值的计算方法是根据每个像素周围的邻域像素值来决定该像素的阈值。这对于光照不均匀的图像非常有用。

自适应阈值的基本方法:

  • 局部区域:将图像分为小区域(通常是一个方块或矩形),对每个小区域计算阈值。
  • 方法选择:常用的两种方法是计算局部区域的均值 和 使用高斯加权平均来计算局部区域的阈值。

OpenCV 中的 cv2.adaptiveThreshold 函数

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

3.1 参数说明

  • src: 输入图像,必须是灰度图。
  • maxValue: 输出图像的最大值,通常为 255。
  • adaptiveMethod: 自适应方法,常用的有:
  • cv2.ADAPTIVE_THRESH_MEAN_C: 使用局部区域的均值作为阈值。
  • cv2.ADAPTIVE_THRESH_GAUSSIAN_C: 使用局部区域的高斯加权均值作为阈值。
  • thresholdType: 阈值类型,通常为 cv2.THRESH_BINARY 或 cv2.THRESH_BINARY_INV。
  • blockSize: 计算阈值时使用的邻域大小,必须是奇数。
  • C: 常数,表示阈值的调整项,用于减去均值或高斯加权均值。

3.2 示例代码

import cv2
import numpy as np# 读取图像并转换为灰度图
image = cv2.imread('D:\\resource\\qt.jpg')
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 设置阈值和最大值
thresh_value = 127
max_value = 255# 应用自适应阈值
result_adaptive = cv2.adaptiveThreshold(gray_image, 255, cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY, 11, 2)# 显示结果
cv2.imshow('Image', image)
#cv2.imshow('Gray', gray_image)
cv2.imshow('Adaptive', result_adaptive)
cv2.waitKey(0)
cv2.destroyAllWindows()

3.3 运行结果

说明:

  • 原始图像:灰度图像
  • 自适应阈值结果:基于每个小区域计算阈值,从而解决了全局阈值方法无法处理的光照不均匀问题。

4. 总结

4.1 二值化

  • 使用全局阈值将图像转换为黑白图像,适用于光照均匀或噪声较少的图像。
  • OpenCV 提供的 cv2.threshold 函数能够方便地实现这种操作。

4.2 自适应阈值

  • 对于光照不均匀或噪声较多的图像,自适应阈值方法会动态调整每个像素的阈值,适应不同区域的局部光照。
  • OpenCV 提供的 cv2.adaptiveThreshold 函数能够根据局部区域计算阈值,常用于图像处理和文字识别等任务。

这两种方法在图像处理、图像分割、OCR(光学字符识别)等场景中都有广泛应用。通过调整阈值和自适应方法的参数,可以实现更加精确的二值化效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/9889.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java面试题2025-设计模式

1.说一下开发中需要遵守的设计原则? 设计模式中主要有六大设计原则,简称为SOLID ,是由于各个原则的首字母简称合并的来(两个L算一个,solid 稳定的),六大设计原则分别如下: 1、单一职责原则 单一职责原则的定义描述非…

Win11下帝国时代2无法启动解决方法

鼠标右键点图标,选择属性 点开始,输入启用和关闭

JAVA实战开源项目:在线文档管理系统(Vue+SpringBoot) 附源码

本文项目编号 T 038 ,文末自助获取源码 \color{red}{T038,文末自助获取源码} T038,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

Python设计模式 - 组合模式

定义 组合模式(Composite Pattern) 是一种结构型设计模式,主要意图是将对象组织成树形结构以表示"部分-整体"的层次结构。这种模式能够使客户端统一对待单个对象和组合对象,从而简化了客户端代码。 组合模式有透明组合…

算法每日双题精讲 —— 前缀和(【模板】一维前缀和,【模板】二维前缀和)

在算法竞赛与日常编程中,前缀和是一种极为实用的预处理技巧,能显著提升处理区间和问题的效率。今天,我们就来深入剖析一维前缀和与二维前缀和这两个经典模板。 一、【模板】一维前缀和 题目描述 给定一个长度为 n n n 的整数数组 a a a&…

VLLM性能调优

1. 抢占 显存不够的时候,某些request会被抢占。其KV cache被清除,腾退给其他request,下次调度到它,重新计算KV cache。 报这条消息,说明已被抢占: WARNING 05-09 00:49:33 scheduler.py:1057 Sequence gr…

知识管理系统塑造企业文化与学习型组织的变革之路

内容概要 知识管理系统(Knowledge Management System, KMS)是指组织内部为有效获取、存储、共享和应用知识而建立的结构和技术体系。这一系统不仅是信息技术的运用,更是推动企业文化和学习型组织发展的重要工具。在当今快速变化的商业环境中…

智能汽车网络安全威胁报告

近年来随着智能汽车技术的快速发展,针对智能汽车的攻击也逐渐从传统的针对单一车辆控制器的攻击转变为针对整车智能化服务的攻击,包括但不限于对远程控制应用程序的操控、云服务的渗透、智能座舱系统的破解以及对第三方应用和智能服务的攻击。随着WP.29 …

Python练习(2)

今日题单 吃鱼还是吃肉 PTA | 程序设计类实验辅助教学平台 降价提醒机器人PTA | 程序设计类实验辅助教学平台 幸运彩票 PTA | 程序设计类实验辅助教学平台 猜帽子游戏 PTA | 程序设计类实验辅助教学平台 谁管谁叫爹 PTA | 程序设计类实验辅助教学平台 就不告诉你 PTA | 程…

Ubuntu-手动安装 SBT

文章目录 前言Ubuntu-手动安装 SBT1. SBT是什么?1.1. SBT 的特点1.2. SBT 的基本功能1.3. SBT 的常用命令 2. 安装2.1. 下载2.2. 解压 sbt 二进制包2.3. 确认 sbt 可执行文件的位置2.4. 设置执行权限2.5. 创建符号链接2.6. 更新 PATH 环境变量2.7. 验证 sbt 安装 前言 如果您觉…

240. 搜索二维矩阵||

参考题解:https://leetcode.cn/problems/search-a-2d-matrix-ii/solutions/2361487/240-sou-suo-er-wei-ju-zhen-iitan-xin-qin-7mtf 将矩阵旋转45度,可以看作一个二叉搜索树。 假设以左下角元素为根结点, 当target比root大的时候&#xff…

Golang笔记——常用库context和runtime

大家好,这里是Good Note,关注 公主号:Goodnote,专栏文章私信限时Free。本文详细介绍Golang的常用库context和runtime,包括库的基本概念和基本函数的使用等。 文章目录 contextcontext 包的基本概念主要类型和函数1. **…

Leetcode:350

1,题目 2,思路 首先判断那个短为什么呢因为我们用短的数组去挨个点名长的数组主要用map装长的数组max判断map里面有几个min数组的元素,list保存交集最后用数组返回list的内容 3,代码 import java.util.*;public class Leetcode…

《多线程基础之互斥锁》

【互斥锁导读】互斥锁是大家使用最多的线程同步手段,但仅仅知道怎么用还是不够的?比如:面试官问你"互斥锁是属于内核层还是应用层的同步保护机制?性能怎样?","频繁加解锁,会有什…

【Rust自学】15.0. 智能指针(序):什么是智能指针及Rust智能指针的特性

喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 15.0.1 指针的基本概念 指针是一个变量在内存中包含的是一个地址,指向另一个数据。 Rust 中最常见的指针是引用&#xff0c…

Android Studio 正式版 10 周年回顾,承载 Androider 的峥嵘十年

Android Studio 1.0 宣发于 2014 年 12 月,而现在时间来到 2025 ,不知不觉间 Android Studio 已经陪伴 Androider 走过十年历程。 Android Studio 10 周年,也代表着了我的职业生涯也超十年,现在回想起来依然觉得「唏嘘」&#xff…

Swing使用MVC模型架构

什么是MVC模式? MVC是一组英文的缩写,其全名是Model-View-Controller,也就是“模型-视图-控制器”这三个部分组成。这三个部分任意一个部分发生变化都会引起另外两个发生变化。三者之间的关系示意图如下所示: MVC分为三个部分,所以在MVC模型中将按照此三部分分成三…

1.Template Method 模式

模式定义 定义一个操作中的算法的骨架(稳定),而将一些步骤延迟(变化)到子类中。Template Method 使得子类可以不改变(复用)一个算法的结构即可重定义(override 重写)该算法的某些特…

arm-linux-gnueabihf安装

Linaro Releases windows下打开wsl2中的ubuntu,资源管理器中输入: \\wsl$gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz 复制到/home/ark01/tool 在 Ubuntu 中创建目录: /usr/local/arm,命令如下: …

【PyTorch】6.张量形状操作:在深度学习的 “魔方” 里,玩转张量形状

目录 1. reshape 函数的用法 2. transpose 和 permute 函数的使用 4. squeeze 和 unsqueeze 函数的用法 5. 小节 个人主页:Icomi 专栏地址:PyTorch入门 在深度学习蓬勃发展的当下,PyTorch 是不可或缺的工具。它作为强大的深度学习框架&am…