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

news2024/11/17 9:51:25

► 前言

本篇将介绍使用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在线答疑解惑!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mysql安装及部署

1.在/usr/local下创建mysql目录 cd /usr/local mkdir /mysql 2.在mysql目录中下载 cd mysql/ wget https://cdn.mysql.com/archives/mysql-8.0/mysql-8.0.34-1.el9.x86_64.rpm-bundle.tar 3.解压 tar xvf mysql-8.0.34-1.el9.x86_64.rpm-bundle.tar 4.安装 dnf localinst…

JS-WebAPIs-元素尺寸与位置(三)

使用场景: 前面案例滚动多少距离,都是我们自己算的,最好是页面滚动到某个元素,就可以做某些事。简单说,就是通过js的方式,得到元素在页面中的位置这样我们可以做,页面滚动到这个位置&#xff0…

137基于matlab的面和线接触的滑块润滑

基于matlab的面和线接触的滑块润滑,基于有限差分法求解面接触滑块润滑的油膜厚度、油膜压力,输出三维可视化结果。程序已调通,可直接运行。 137 matlab油膜压力油膜厚度 (xiaohongshu.com)

商用软件方案的多种交付方式有什么优势?

商用软件方案在交付上,往往存在多种模式,包括SaaS模式、私有化部署、SDK嵌入式等等,SaaS模式讲究一个标准化,旨在最大限度的降低部署成本,但对于一些定制化程度比较高的需求,往往企业仍然需要采用私有化部署…

暴雨信息与英特尔联合发布全球首个全液冷冷板服务器参考设计

科技之家 1 月 19 日消息,据暴雨服务器官方消息,1 月 18 日,暴雨信息与英特尔联合发布全球首个全液冷冷板服务器参考设计,并面向业界开放,推动全液冷冷板解决方案在全球数据中心的大规模部署应用。 基于该参考设计&am…

10个常考的前端手写题,你全都会吗?

前言 📫 大家好,我是南木元元,热爱技术和分享,欢迎大家交流,一起学习进步! 🍅 个人主页:南木元元 今天来分享一下10个常见的JavaScript手写功能。 目录 1.实现new 2.call、apply、…

区域入侵检测AI边缘计算智能分析网关V4如何通过ssh进行服务器远程运维

智能分析网关V4是一款高性能、低功耗的AI边缘计算硬件设备,它采用了BM1684芯片,集成高性能8核ARM A53,主频高达2.3GHz,并且INT8峰值算力高达17.6Tops,FB32高精度算力达到2.2T,每个摄像头可同时配置3种算法&…

SD-WAN保障服务质量的五大核心功能

基于 MPLS 的传统专用网络极度结构化、僵化,缺乏灵活性和变通性。SD-WAN让传统的MPLS专用网络显得相形见绌。这种创新的网络架构不仅在管理灵活性和成本效益方面取得显著进展,更能够随着业务的扩张和新分支机构的增设而高效扩展。在SD-WAN中,…

Linux操作系统----gdb调试工具(配实操图)

绪论​ “不用滞留采花保存,只管往前走去,一路上百花自会盛开。 ——泰戈尔”。本章是Linux工具篇的最后一章。gdb调试工具是我们日常工作中需要掌握的一项重要技能我们需要基本的掌握release和debug的区别以及gdb的调试方法的指令。下一章我们将进入真正…

探索设计模式的魅力:“感受单例模式的力量与神秘” - 掌握编程的王牌技巧

在软件开发的赛场上,单例模式以其独特的魅力长期占据着重要的地位。作为设计模式中的一员,它在整个软件工程的棋盘上扮演着关键性角色。本文将带你深入探索单例模式的神秘面纱,从历史渊源到现代应用,从基础实现到高级技巧&#xf…

数据结构实验6:图的应用

目录 一、实验目的 1. 邻接矩阵 2. 邻接矩阵表示图的结构定义 3. 图的初始化 4. 边的添加 5. 边的删除 6. Dijkstra算法 三、实验内容 实验内容 代码 截图 分析 一、实验目的 1.掌握图的邻接矩阵的存储定义; 2.掌握图的最短路径…

Idea 开发环境不断切换git代码分支导致冲掉别人代码

问题分析 使用git reflog查看执行命令,以下是发生事故的切换和提交动作 46f72622e1 HEAD{41}: commit: feat: 【Sales - 6.3】小程序端不登录也可以录入客户线索 c5e7d9f6e1 HEAD{42}: fetch origin feature/20240102_Sales6.3_xingang:feature/20240102_Sales6.3…

基于 IDEA 进行 Maven 依赖管理

一、依赖管理概念 Maven 依赖管理是 Maven 软件中最重要的功能之一。Maven 的依赖管理能够帮助开发人员自动解决软件包依赖问题,使得开发人员能够轻松地将其他开发人员开发的模块或第三方框架集成到自己的应用程序或模块中,避免出现版本冲突和依赖缺失等…

旧衣物回收小程序搭建,旧衣回收利润有多高?

在当下人们的生活水平日益提高,淘汰的旧衣物逐渐增加。面对这些旧衣物,很多人舍不得丢弃,既浪费又污染环境,只能常年堆积在家里。为了解决这一问题,旧衣回收成为了大众的选择。大家能够将淘汰的衣物进行回收&#xff0…

Java-NIO篇章(4)——Selector选择器详解

Selector介绍 选择器(Selector)是什么呢?选择器和通道的关系又是什么?这里详细说明,假设不用选择器,那么一个客户端请求数据传输那就需要建立一个连接,为了避免线程阻塞,那么每个客…

微分方程(1)微分方程的历史

总之就是学习吧~ Introduction Without knowing something about differential equations and methods of solving them, it is difficult to appreciate the history of this important branch of mathematics. Further, the development of differential equations is inti…

如何用GOWIN创建FPGA工程

高云FPGA如何创建工程 第一步:安装Gowin软件,这个在高云的官网是可以下载的 第二步:点开这个软件,点击“New Project…” 点击“Next” 选择自己对应的器件型号: 工程创建成功,如下图: 最后将…

给程序加个进度条吧!1行Python代码,快速搞定~

你在写代码的过程中,有没有遇到过以下问题? 已经写好的程序,想看看程序执行的进度? 在写代码批量处理文件的时候,如何显示现在处理到第几个文件了? 👆如上图所示的进度条是一个最好的解决方法…

如何解决分支机构无法连入总部采购管理系统的难题

案例背景: 某企业业务规模不断壮大,内部采购流程越发复杂,供应商资质情况各异难以管理,为提高内部采购效率和采购品质,优化供应链管理,确保采购环节公正透明可溯,该企业集中化部署了采购管理系…

高级RAG(八): 自动合并检索(Auto-merging Retrieval)

自动合并检索(Auto-merging Retrieval)是LlamaIndex的另外一种高级RAG技术,它有点类似与我们之间介绍的从小到大的检索,不过自动合并检索要比“从小到大的检索”稍微复杂一些,它首先将文档按一定的层次结构进行切割,然后在检索的时…