ubuntu22.04@laptop OpenCV Get Started: 009_image_thresholding

ubuntu22.04@laptop OpenCV Get Started: 009_image_thresholding

  • 1. 源由
  • 2. image_thresholding应用Demo
    • 2.1 C++应用Demo
    • 2.2 Python应用Demo
  • 3. 重点分析
    • 3.1 Binary Thresholding ( THRESH_BINARY )
    • 3.2 Inverse-Binary Thresholding ( THRESH_BINARY_INV )
    • 3.3 Truncate Thresholding ( THRESH_TRUNC )
    • 3.4 Threshold to Zero ( THRESH_TOZERO )
    • 3.5 Inverted Threshold to Zero ( THRESH_TOZERO_INV )
  • 4. 总结
  • 5. 参考资料
  • 6. 补充

1. 源由

阈值过滤也是OpenCV图像最基本的操作之一。

其主要方法就是:

  1. 通过一个阈值(阈值)来判断数据的有效性
  2. 通过加强对比度来让肉眼更易识别图像

比如:一张灰度图上,当灰度相近似的时候,肉眼其实很难判断出来。但是通过阈值判断和加强,就可以非常容易的让肉眼轻易识别图形。

2. image_thresholding应用Demo

009_image_thresholding是OpenCV通过阈值对图像过滤的示例程序。

2.1 C++应用Demo

C++应用Demo工程结构:

009_image_thresholding/CPP$ tree .
.
├── CMakeLists.txt
├── image_threshold.cpp
└── threshold.png0 directories, 3 files

确认OpenCV安装路径:

$ find /home/daniel/ -name "OpenCVConfig.cmake"
/home/daniel/OpenCV/installation/opencv-4.9.0/lib/cmake/opencv4/
/home/daniel/OpenCV/opencv/build/OpenCVConfig.cmake
/home/daniel/OpenCV/opencv/build/unix-install/OpenCVConfig.cmake$ export OpenCV_DIR=/home/daniel/OpenCV/installation/opencv-4.9.0/lib/cmake/opencv4/

C++应用Demo工程编译执行:

$ mkdir build
$ cd build
$ cmake ..
$ cmake --build . --config Release
$ cd ..
$ ./build/image_threshold

2.2 Python应用Demo

Python应用Demo工程结构:

009_image_thresholding/Python$ tree .
.
├── image_threshold.py
├── requirements.txt
└── threshold.png0 directories, 3 files

Python应用Demo工程执行:

$ workoncv-4.9.0
$ python image_threshold.py

3. 重点分析

在这里插入图片描述

3.1 Binary Thresholding ( THRESH_BINARY )

过滤规则:阈值两端极化操作

# Binary Threshold
if src(x,y) > threshdst(x,y) = maxValue
elsedst(x,y) = 0

在这里插入图片描述

C++:

// Thresholding with threshold value set 127 
threshold(src,dst,127,255, THRESH_BINARY); 

Python:

# Thresholding with threshold value set 127 
th, dst = cv2.threshold(src,127,255, cv2.THRESH_BINARY) 

3.2 Inverse-Binary Thresholding ( THRESH_BINARY_INV )

过滤规则:阈值两端反向极化操作

# Inverse Binary Threshold
if src(x,y) > threshdst(x,y) = 0
elsedst(x,y) = maxValue

在这里插入图片描述

C++:

// Thresholding using THRESH_BINARY_INV 
threshold(src,dst,127,255, THRESH_BINARY_INV); 

Python:

# Thresholding using THRESH_BINARY_INV 
th, dst = cv2.threshold(src,127,255, cv2.THRESH_BINARY_INV) 

3.3 Truncate Thresholding ( THRESH_TRUNC )

过滤规则:超过阈值截断操作

# Truncate Threshold
if src(x,y) > threshdst(x,y) = thresh
elsedst(x,y) = src(x,y)

在这里插入图片描述

C++:

// Thresholding using THRESH_TRUNC 
threshold(src,dst,127,255, THRESH_TRUNC); 

Python:

# Thresholding using THRESH_TRUNC 
th, dst = cv2.threshold(src,127,255, cv2.THRESH_TRUNC) 

3.4 Threshold to Zero ( THRESH_TOZERO )

过滤规则:低于阈值归零

# Threshold to Zero
if src(x,y) > threshdst(x,y) = src(x,y)
elsedst(x,y) = 0

在这里插入图片描述

C++:

// Thresholding using THRESH_TOZERO 
threshold(src,dst,127,255, THRESH_TOZERO); 

Python:

# Thresholding using THRESH_TOZERO 
th, dst = cv2.threshold(src,127,255, cv2.THRESH_TOZERO) 

3.5 Inverted Threshold to Zero ( THRESH_TOZERO_INV )

过滤规则:超过阈值归零

# Inverted Threshold to Zero
if src(x,y) > threshdst(x,y) = 0
elsedst(x,y) = src(x,y)

在这里插入图片描述

C++:

// Thresholding using THRESH_TOZERO_INV 
threshold(src,dst,127,255, THRESH_TOZERO_INV); 

Python:

# Thresholding using THRESH_TOZERO_INV 
th, dst = cv2.threshold(src,127,255, cv2.THRESH_TOZERO_INV) 

4. 总结

前面《ubuntu22.04@laptop OpenCV Get Started: 008_image_filtering_using_convolution》对图像进行卷积的计算机操作,从而对数据进行有效性过滤。

本文通过对图像进行阈值的计算机操作,从而对数据进行有效性过滤,在特定的场景下,依然能够实现很好的图像数据分析作用。

  • threshold(src,dst,thresh,maxval, type))
  • src Source array (single-channel).
  • dst Destination array with the same size and type as src .
  • thresh Threshold value.
  • maxval Maximum value to use with THRESH_BINARY and THRESH_BINARY_INV threshold types.
  • type Threshold type. For details, see threshold . The THRESH_MASK, THRESH_OTSU and THRESH_TRIANGLE threshold types are not supported.

5. 参考资料

【1】ubuntu22.04@laptop OpenCV Get Started
【2】ubuntu22.04@laptop OpenCV安装
【3】ubuntu22.04@laptop OpenCV定制化安装

6. 补充

学习是一种过程,对于前面章节学习讨论过的,就不在文中重复了。

有兴趣了解更多的朋友,请从《ubuntu22.04@laptop OpenCV Get Started》开始,一个章节一个章节的了解,循序渐进。

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

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

相关文章

(15)Hive调优——数据倾斜的解决指南

目录 前言 一、什么是数据倾斜 二、发生数据倾斜的表现 2.1 MapReduce任务 2.2 Spark任务 三、如何定位发生数据倾斜的代码 四、发生数据倾斜的原因 3.1 key分布不均匀 3.1.1 某些key存在大量相同值 3.1.2 存在大量异常值或空值 3.2 业务数据本身的特性 3.3 SQL语句…

扶贫|精准扶贫管理系统|基于Springboot的精准扶贫管理系统设计与实现(源码+数据库+文档)

精准扶贫管理系统目录 目录 基于Springboot的精准扶贫管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员模块的实现 (1)用户信息管理 (2)贫困户信息管理 (3)新闻类型管理 &a…

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Search\JumplistData

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Search\JumplistData HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Search\JumplistData是一个注册表键,它存储了Windows操作系统中搜索功能的跳转列表数据。这些数据包括最近搜索的…

GPT-4影响高度创新思维的领域(一)

GPT-4的应用范围不再局限于对现有信息的检索、整理和复述,而是进一步拓展到了诸如文学创作、科学假设生成、教育辅导、商业策略建议等需要高度创新思维的领域。这种独立思考和创新能力赋予了GPT-4作为虚拟助手时更加丰富多元的角色定位,使其成为一种强大…

备战蓝桥杯---图论之最短路dijkstra算法

目录 先分个类吧: 1.对于有向无环图,我们直接拓扑排序,和AOE网类似,把取max改成min即可。 2.边权全部相等,直接BFS即可 3.单源点最短路 从一个点出发,到达其他顶点的最短路长度。 Dijkstra算法&#x…

二叉树相关OJ题

创作不易,感谢三连!! 一、选择题 1、某二叉树共有 399 个结点,其中有 199 个度为 2 的结点,则该二叉树中的叶子结点数为( ) A.不存在这样的二叉树 B.200 C.198 D.199解析:选B&…

WebSocket | 基于TCP的全双工通信网络协议

文章目录 1、介绍2、示例2.1、分析2.2、代码开发2.3、功能测试 ​🍃作者介绍:双非本科大三网络工程专业在读,阿里云专家博主,专注于Java领域学习,擅长web应用开发、数据结构和算法,初步涉猎Python人工智能开…

Android14之Android Rust模块编译语法(一百八十七)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

问题:从完整的问题解决过程来看,( )是首要环节。A.理解问题 B.提出假设C.发现问题 D.检验假设 #学习方法#学习方法

问题:从完整的问题解决过程来看,( )是首要环节。A.理解问题 B.提出假设C.发现问题 D.检验假设 A.理解问题 B.提出假设 C.发现问题 参考答案如图所示

Python setattr函数

在Python编程中,setattr()函数是一个有用且灵活的内置函数,用于设置对象的属性值。它可以在运行时动态地设置对象的属性,无论是新建对象还是已有对象。本文将深入探讨setattr()函数的用法、语法、示例代码,并探讨其在实际编程中的…

【ASP.NET Core 基础知识】--最佳实践和进阶主题--设计模式在ASP.NET Core中的应用

一、设计模式概述 1.1 什么是设计模式 设计模式是在软件设计过程中反复出现的、经过验证的、可重用的解决问题的方法。它们是针对特定问题的通用解决方案,提供了一种在软件开发中可靠的指导和标准化方法。设计模式通常描述了一种在特定情景下的解决方案&#xff0…

2/13 知识回顾

一、磁盘操作 1.U盘接入虚拟机 在虚拟机中查找可移动设备 2.检测U盘是否被虚拟机识别 ls /dev/sd* 查找到有除sda外的内容,说明U盘链接成功 3.查看磁盘的使用情况 df -h 若U盘没有被挂载在具体的目录下时,是不能被查找到的4.给磁盘分区 使用 …

MySQL数据库基础(三):Linux系统下的MySQL安装与使用

文章目录 Linux系统下的MySQL安装与使用 一、MySQL部署安装 1. 卸载自带的MySQL8 2. 删除自带配置文件 3. 下载MySQL源 4. 安装MySQL源 5. 使用yum安装MySQL 6. 获取默认密码 7. 登录MySQL 8. 修改密码 二、登陆MySQL数据库 1、本地(针对本地MySQL&…

【DDD】学习笔记-对象图与聚合

类之间的关系 在理解领域驱动设计的聚合(Aggregate)之前,我们需要先理清面向对象设计中对象之间的关系。正如生活中我们不可能做到“鸡犬之声相闻,老死不相往来”一般,对象之间必然存在关系,如此才可以通力…

C++入门篇(5)——类和对象(2)

目录 1.类的6个默认成员函数 2.构造函数 2.2 概念 2.3 特性 3.析构函数 3.1 概念 3.2 特性 1.类的6个默认成员函数 如果一个类一个成员都没有,那么这个类就是空类。但空类并非什么都没有,编译器会对任何一个类都生成六个默认成员函数。 2.构造…

C++学习:二分查找

二分查找的前提 库函数只能对数组进行二分查找。 对一个数组进行二分查找的前提是这个数组中的元素是单调的。 一般为单调不减,当然如果是单调不增也可以(需要修改比较函数) 例如: [1,5,5,9,18]是单调的 [1 , 9, 9,…

Git 初学

目录 一、需求的产生 二、版本控制系统理解 1. 认识版本控制系统 2. 版本控制系统分类 (1)集中式版本控制系统 缺点: (2)分布式版本控制系统 三、初识 git 四、git 的使用 例:将 “ OLED文件夹 ”…

面试计算机网络框架八股文十问十答第五期

面试计算机网络框架八股文十问十答第五期 作者:程序员小白条,个人博客 相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新! ⭐点赞⭐收藏⭐不迷路!⭐ 1)与缓存相关的HTTP请…

java排课管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java排课管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0&#…

Learn LaTeX 020 - LaTex Math Space Font 数学排版之空格、字号、字体

数学排版中很好的处理空格、字号和字体可以使你的出版文档平添更多的特色。 这个视频介绍并演示了这些方面的相关配置。 https://www.ixigua.com/7298100920137548288?id7307759620737466891&logTagb138f9145ce004f6b52a