Python OpenCV 影像处理:影像二值化

► 前言

本篇将介绍使用OpenCV Python对于图像上的二值化操作,二值化主要用途包括图像分割、物体侦测、文字识别等。这种转换可以帮助检测图像中的物体或特定特征,并提取有用的信息。透过程式码的说明,让各位了解OpenCV Python于图像处理上的基本操作。

► 二值化定义

将一幅灰度图像转换为黑白图像的过程。它的目标是将灰度图像中的每个像素点分为两个类别:一个是前景(通常是物体或感兴趣的区域),另一个是背景。二值化后的图像中只包含两种值,通常是0和255(或1),分别表示黑色(背景)和白色(前景)。

►固定阈值二值化(Thresholding)

将图像的每个像素值与一个固定阈值进行比较,将像素值分为两个类别:大于阈值的设为一个值(通常是255),小于阈值的设为另一个值(通常是0)。

cv2.THRESH_BINARY

# 如果大于 127 就等于 255,反之等于 0

cv2.THRESH_BINARY_INV

# 如果大于 127 就等于 0,反之等于 255

cv2.THRESH_TRUNC

# 如果大于 127 就等于 127,反之数值不变

cv2.THRESH_TOZERO

# 如果大于 127 数值不变,反之数值等于 0

cv2.THRESH_TOZERO_INV

# 如果大于 127 等于 0,反之数值不变

►自适应阈值二值化(Adaptive Thresholding)

自适应阈值二值化允许根据图像的局部区域调整阈值。它将图像分为许多小区域,并为每个区域自动计算阈值。这对于处理不均匀光照的图像特别有用。

►Otsu's 二值化

►TRIANGLE 二值化

TRIANGLE 二值化是另一种自动选择阈值的方法,通常适用于单峰分布的图像。它根据直方图的形状选择阈值。

►选择适当的二值化方法和阈值

在OpenCV中选择适当的二值化方法和阈值通常取决于图像特性和应用需求。
 

可以先分析图像的特性

  • 图像的亮度分布是单峰分布还是多峰分布?
  • 图像是否受到噪声的影响?
  • 图像中的物体是深色物体对比亮背景,还是亮色物体对比暗背景?
  1. 如果图像的亮度分布相对均匀,可以使用固定阈值二值化进行二值化操作,通过观察图像直方图来估计一个适当的阈值。
  2. 如果图像的光照不均匀或受到阴影影响,可以使用自适应阈值二值化,自适应阈值二值化,可以在不同区域使用不同的阈值,以适应局部光照变化。
  3. 如果要自动选择阈值,可以使用Otsu's 二值化或TRIANGLE 二值化方法根据图像的灰度分布自动选择最佳阈值。
     

以上方的范例图片进行直方图显示,范例图片偏向单峰分布,透过TRIANGLE 二值化可以很明显的前后景区分出来。


►小结

透过以上讲解,搭配程式码进行范例讲解,相信各位对于图像上的二值化操作能有更深刻的理解,期待下一篇博文吧!
 

►Q&A

 问题一:二值化为甚么要灰度图?

二值化通常应用在灰度图像上,而不是彩色图像,是因为灰度图像只包含亮度信息,它是一种单通道图像,每个像素点的值表示亮度强度,而不考虑颜色信息。在进行二值化时,我们主要关心的是像素的亮度值是否大于或小于阈值,因此使用灰度图像更简单且具有优势。
 

问题二:在OpenCV中如何评估和调整二值化的效果?

可以使用OpenCV来将原始图像、二值化结果和任何后处理的图像进行可视化,以便比较和分析,或是透过评估指标IoU(Intersection over Union)或Dice系数,用于评估分割的准确性。
 

问题三:如何选择适当的阈值和二值化方法?

选择适当的阈值和二值化方法取决于影像的特性和应用需求。您可以通过观察影像的直方图来估计阈值,或者使用自适应阈值方法。不同的应用可能需要不同的阈值和二值化方法,您可以通过试验不同的组合来找到最适合的选择。

问题四:如何处理彩色影像的二值化?

对于彩色影像,通常需要将其转换为灰度影像,然后进行二值化处理。可以使用cv2.cvtColor将彩色影像转换为灰度影像,然后选择适当的二值化方法进行处理。在某些情况下,也可以分别处理每个通道的灰度影像,然后组合它们以获得最终的二值化结果。
 

问题五:自适应阈值二值化的优势是什么?

自适应阈值二值化能够应对不同区域的光照变化,使阈值能够根据局部影像特性自动调整。这使其适用于具有不均匀照明的影像,例如文件扫描或工业检测。


►参考资料    

OpenCV - Open Computer Vision Library

 登录大大通,了解更多详情,解锁1500+完整应用方案,更有大联大700+FAE在线答疑解惑!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python数据分析(1)Matrix Manipulation

主要根据的是这学期修的一门data science and analysis课程里的lab,自己做完lab之后会反思一下自己学到的内容吧。 然后这周lab的话主要是用numpy来处理矩阵(毕竟numpy可以有效地处理数组)。 创建矩阵 np.zeros(k), np.ones(k) #一维矩阵 …

uniapp h5 生成 ubuntu桌面程序 并运行方法

uniapp h5 生成 ubuntu桌面程序 并运行方法,在window环境下开发,发布到ubuntu桌面,并运行 1、安装Nodejs 安装包官方下载地址:https://www.nodejs.com.cn/ 安装完后cmd,如图,即安装成功 2、通过Nodejs安装 electron…

适合初学者的机器学习开源项目合集(已加入Github加速计划)

目录 开源项目合集[>> 机器学习路线图:mrdbourke/machine-learning-roadmap](https://gitcode.com/mrdbourke/machine-learning-roadmap)[>> 机器学习资源的汇总:johnmyleswhite/ML_for_Hackers](https://gitcode.com/johnmyleswhite/ML_for…

golang面试题大全

go基础类 1、与其他语言相比,使用 Go 有什么好处? 与其他作为学术实验开始的语言不同, Go 代码的设计是务实的。每个功能和语法决策都旨在让程序员的生活更轻松。Golang 针对并发进行了优化,并且在规模上运行良好。由于单一的标…

2024 前端高频面试题之 HTML/CSS 篇

【前言】随着市场的逐渐恶劣,通过总结面试题的方式来帮助更多的coder,也是记录自己的学习过程,温故而知新。欢迎各位同胞大大点评补充~ 前端面试题之 HTML/CSS 篇 1、HTML 语义化?2、块级元素&内联样式3、盒子模型的理解&…

提升开发效率,Fiddler Everywhere for Mac助您解决网络调试难题

在现代软件开发中,网络调试是一个不可或缺的环节。无论是前端开发还是后端开发,我们经常需要对网络请求进行监控和调试,以便及时发现并解决问题。而Fiddler Everywhere for Mac作为一款强大的网络调试工具,能够帮助开发者提升工作…

Dubbo使用详解

简介 Dubbo是一个高性能、轻量级的开源Java RPC框架,由阿里巴巴公司开发并开源。它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。Dubbo使得应用可通过高性能的 RPC 实现服务的输出和输…

CentOS 8.5 安装图解

特特特别的说明 CentOS发行版已经不再适合应用于生产环境,客观条件不得不用的话,优选7.9版本,8.5版本次之,最次6.10版本(比如说Oracle 11GR2就建议在6版本上部署)! 引导和开始安装 选择倒计时结…

深度解析 Compose 的 Modifier 原理 -- Modifier.composed()、ComposedModifier

" Jetpack Compose - - Modifier 系列文章 " 📑 《 深入解析 Compose 的 Modifier 原理 - - Modifier、CombinedModifier 》 📑 《 深度解析 Compose 的 Modifier 原理 - - Modifier.composed()、ComposedModifier 》 📑 《 深入解…

强化学习(二)多臂老虎机 “Multi-armed Bandits”——1

将强化学习与机器学习、深度学习区分开的最重要的特征为:它通过训练中信息来评估所采取的动作,而不是给出正确的动作进行指导,这极大地促进了寻找更优动作的需求。 1、多臂老虎机(Multi-armed Bandits)问题 赌场的老虎…

springBoot如何动态切换数据源

项目背景:最近公司中需要搭建mysql的主从,想着在spring中集成多数据源。mybatisplus提供的有插件用DS注解就能够实现,但是这种在mysql服务宕机的情况下不能够进行自动切换,于是就想着用aop自定义注解的方式来实现 项目实现效果&a…

el-tree获取当前选中节点及其所有父节点的id(包含半选中父节点的id)

如下图,我们现在全勾中的有表格管理及其下的子级,而半勾中的有工作台和任务管理及其子级 现在点击保存按钮后,需要将勾中的节点id及该节点对应的父节点,祖先节点的id(包含半选中父节点的id)也都一并传给后端,那这个例子里就应该共传入9个id,我们可以直接将getCheckedK…

架构篇07-复杂度来源:低成本、安全、规模

文章目录 低成本安全规模小结关于复杂度来源,前面的专栏已经讲了高性能、高可用和可扩展性,今天我们来聊聊复杂度另外三个来源低成本、安全和规模。 低成本 当我们的架构方案只涉及几台或者十几台服务器时,一般情况下成本并不是我们重点关注的目标,但如果架构方案涉及几百…

【Docker】在centos中安装nginx

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是平顶山大师,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的博客专栏《【Docker】安装nginx》。🎯&#…

Macos flatter(用于快速LLL)本地编译安装(解决安装过程各种疑难杂症)

flatter是一个开源项目,能大大提高LLL的速度,项目提供的安装文档适用于Ubuntu,但是在macos上安装,总会遇到各种各样的问题,这里记录下所踩坑,帮助大家快速在macos上安装flatter。 文章目录 1.安装依赖库&am…

【linux进程间通信(一)】匿名管道和命名管道

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:Linux从入门到精通⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学更多操作系统知识   🔝🔝 进程间通信 1. 前言2. 进程间…

计算机毕业设计 基于SpringBoot的红色革命文物征集管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

CSS 实现卡片以及鼠标移入特效

CSS 实现卡片以及鼠标移入特效 文章目录 CSS 实现卡片以及鼠标移入特效0、效果预览默认鼠标移入后 1、创建卡片组件2、添加样式3、完整代码 0、效果预览 默认 鼠标移入后 在本篇博客中,我们将探讨如何使用 CSS 来实现卡片组件,并添加鼠标移入特效&#…

第五回 九纹龙剪径赤松林 鲁智深火烧瓦罐寺 Webmin傻瓜式配置服务器

话说鲁智深走过数个山坡,看见一所败落的寺庙,上写“瓦罐之寺”。庙里空无一人,于是鲁智深径直走到后面厨房,发现有几个老和尚。鲁智深向和尚们讨要饭食,和尚们初时推说没有。然而,鲁智深眼尖,发…

【Python程序开发系列】一文搞懂argparse模块的常见用法(案例+源码)

一、引言 argsparse是python的命令行解析的标准模块,内置于python,不需要安装。这个库可以让我们直接在命令行中就可以向程序中传入参数并让程序运行。 在运行深度学习程序时。往往会因为电脑配置不行导致程序运行慢卡,需要将程序在虚机上进行…