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…

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()函数的用法、语法、示例代码,并探讨其在实际编程中的…

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.构造…

Git 初学

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

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

2024下载使用CleanMyMac X软件时需要注意什么?

使用CleanMyMac X清理系统垃圾文件的步骤如下: 打开CleanMyMac X软件。在主界面中,选择“清理”功能块下的“清理系统垃圾”选项。点击“扫描”按钮,软件将自动扫描系统垃圾,包括缓存文件、系统日志文件等。扫描完成后&#xff0…

【Java基础题型】求商和余数

需求:给定两个整数,被除数和除数(都是正数,且不超过int的范围)。 将两数相除,要求不使用乘法、除法和%运算符。 得到商和余数。 被除数 %除数商 ... 余数 #这里%代表除 //1、求商,就是求里…

【剪辑必备】今天我教你如何手动去下载苹果官网4K预告片 完全免费

🚀 个人主页 极客小俊 ✍🏻 作者简介:web开发者、设计师、技术分享博主 🐋 希望大家多多支持一下, 我们一起学习和进步!😄 🏅 如果文章对你有帮助的话,欢迎评论 💬点赞&a…

C++面向对象程序设计-北京大学-郭炜【课程笔记(二)】

C面向对象程序设计-北京大学-郭炜【课程笔记(二)】 1、结构化程序设计结构化程序设计的不足 2、面向对象的程序设计2.1、面向对象的程序设计2.2、从客观事物抽象出类2.3、对象的内存分配2.4、对象之间的运算2.5、使用类的成员变量和成员函数用法1&#x…

代码随想录算法训练营第51天 | 139.单词拆分 多重背包理论基础

单词拆分 这道题最后是判断能否组成,很像回溯法的问题形式,和分割回文串那道题比较类似,所以是可以用回溯法解决的,但是回溯法需要使用记忆化递归来避免超时。 class Solution{ public:bool backtracking(const string s, const …