【OpenCV学习】第13课:基本阈值操作

news2024/11/18 11:27:28

仅自学做笔记用,后续有错误会更改

参考文章:https://blog.csdn.net/qq_37835727/article/details/123373339

理论

  1. 图像阈值:什么是图像阈值?简单点来说就是把图像分割的标尺, 举个栗子, 现在想象一个场景, 一个桌子上有一堆苹果, 现在要求你去将它分为两类, 我们很容易就想到, 把大的划到一边, 小的划到另一边, 那么这个划分大小的标准,具体到某个值, 就是我们所说的阈值, 它是一个划分的标尺。

  2. 阈值类型 - 阈值二值化(threshold binary): 大于阈值的直接赋为最大值(255), 小于阈值的赋为最小值(0)
    图示:
    在这里插入图片描述

  3. 阈值类型 - 阈值反二值化(threshold binary Inverted): 大于阈值的直接赋为最小值(0), 小于阈值的赋为最大值(255)
    图示:
    在这里插入图片描述

  4. 阈值类型 - 截断(truncate) : 超过阈值的部分, 赋值为阈值
    图示:
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/4a2e1e71371841598330adc102d6fd14.png

  5. 阈值类型 - 阈值取零(threshold to zero): 大于阈值部分不变, 小于阈值部分取零
    图示:
    在这里插入图片描述

  6. 阈值类型 - 阈值反取零(threshold to zero inverted): 大于阈值部分取零, 小于阈值部分不变
    图示:
    在这里插入图片描述

  7. 上边几个除了手动输入阈值外, opencv中还提供了两个方法自动帮你找阈值:

  • THRESH_OTSU : 原理是基于类内最小方差实现阈值寻找
  • THRESH_TRIANGLE: 三角算法,原理如图:
    在这里插入图片描述

相关API
threshold(Mat src, Mat dst, int value, int max, int type)

  • 参数1:原图数据
  • 参数2:输出图像数据
  • 参数3:像素阈值
  • 参数4:像素最大值
  • 参数5:阈值操作类型, 可选
    THRESH_BINARY
    THRESH_BINARY_INV
    THRESH_TRUNC
    THRESH_TOZERO
    THRESH_TOZERO_INV
    THRESH_OTSU
    THRESH_TRIANGLE

代码示例

using namespace cv;
Mat src, gray_src, dst;
// 这次直接定义两个滑块值, 一个拖动改变阈值, 一个拖动改变阈值类型,  方便切换查看
int threshold_value = 127; 	 //初始默认阈值
int threshold_max = 255;
int type_value = 2; 				// 初始默认阈值类型
int type_max = 4; 				//阈值类型的最大值,从0~4依次是:THRESH_BINARY, THRESH_BINARY_INV, THRESH_TRUNC, THRESH_TOZERO, THRESH_TOZERO_INV
const char* output_title = "binary image";
void Threshold_Demo(int, void*);
int main(int argc, char** argv){
	src = imread(...);
	if( !src.data ){
		printf(" could not load image...\n ");
		return -1;
	}
	// 照样的, 先显示原图
	namedWindow("input_image", CV_WINDOW_AUTOSIZE);
	imshow("input_image", src);

	namedWindow(output_title, CV_WINDOW_AUTOSIZE);
	createTrackbar("Threshold Value:", output_title, &threshold_value, threshold_max, Threshold_Demo);
	createTrackbar("Type Value:", output_title, &type_value, type_max, Threshold_Demo);
	Treshold_Demo(0, 0);

	waitKey(0);
	return 0;
}
void Threshold_Demo(int, void*){
	//先转为灰度图,  必须有这一步,因为opencv自带接口的阈值操作都是在8位灰度图上操作, 没有这一步程序会直接崩溃
	cvtColor(src, gray_src, CV_BGR2GRAY);
	//再进行阈值操作,其中threshold_value, type_value都是通过滑块动态调整的
	threshold(gray_src, dst, threshold_value, threshold_max, type_value);

	//以下两行代码代表用opencv自动帮你计算阈值,使用这俩就表示threshold_value的值已经无效了,随便你拖动改变值, 它都不会	使用, 只使用它最后计算出来的值	
	//threshold(gray_src, dst, threshold_value, threshold_max, THRESH_OTSU | type_value);
	//threshold(gray_src, dst, threshold_value, threshold_max, THRESH_TRIANGLE | type_value);
	
	imshow(output_title, dst);
}

效果截图(注意图片上两个可拖动的滑块值的变动):

THRESH_BINARY(二值化)效果:
在这里插入图片描述
在这里插入图片描述

THRESH_BINARY_INV(反二值化)效果:
在这里插入图片描述
在这里插入图片描述

THRESH_TRUNC(截断)效果:
在这里插入图片描述
在这里插入图片描述

THRESH_TOZERO(取零)效果:
在这里插入图片描述
在这里插入图片描述
THRESH_TOZERO_INV(反取零)效果:
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

BA_重投影误差e对于相机的位姿ξ和对空间点的坐标P的雅可比矩阵的推导

1. 基本思路 重投影误差表示为e, 相机的位姿表示为ξ (或者表示为T(R,t)), 空间点表示为P, 则空间点投影到相机坐标系下的空间坐标点的相机坐标表示为P[X, Y, Z], 则 重投影误差e对于相机的位姿ξ的雅克比矩阵表示为 分别求等式右侧的两半部分(误差对空…

DevExpress WinForms 22.2

DevExpress WinForms 22.2 添加了对Microsoft.NET 7的完全支持。 此版本现在需要.NET 6和Microsoft Visual Studio 2022(v17.0)或更高版本。 这不会影响.NET Framework客户,产品程序集在此发布周期中将继续以.NET Framework 4.5.2为目标。 蒙皮和矢量图标 WXI皮肤的…

每天五分钟机器学习:经典的降维算法——主成分分析法PCA

本文重点 前面我们学习了降维算法的两大应用场景,本节课程我们将学习具体的降维算法PCA,它是主成分分析法。 PCA要做什么? 将二维数据降维到一维,关键就是找到一个方向向量,然后把所有的数据都投射到该向量上,那么什么样的方向向量最好呢? 我们希望投射平均均方误差…

UIPickerView,UIDatePicker,UITextView

文章目录UIPickerView概念应用创建选中数据时的回调代理UIDatePicker概念创建四种模式UITextView概念创建常用属性与方法常用协议方法UIPickerView 概念 UIPickerView是一个列表控件。它可以提供给用户有限个数的可供选择的选项。 他可以设置列数和每一列的行数,然…

Fiddler抓包和Fiddler过滤器

目录 一、Fiddler与其他抓包工具的区别 二、Fiddler的工作原理 三、使用fiddler实现手机抓包 四、Filters过滤器 一、Fiddler与其他抓包工具的区别 1、Firebug虽然可以抓包,但是对于分析http请求的详细信息,不够强大。模拟http请求的功能也不够&…

简述基于JavaEE企业级开发技术

一、绪论 1、学习内容 javaEE企业开发技术概述javaEE容器——SpringORM数据层——MyBatis/JPAWeb层——Spring MVC展现层——JSP/Thymeleaf整合框架——SSM/SSH用户模块分析用户模块功能模块设计 前端框架:Bootstrap,NodeJS,Vue/React/Ang…

[附源码]计算机毕业设计个性化名片网站Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Appium基础 — Appium测试环境搭建总结

1、Appium测试环境搭建整体思路 (1)Android测试环境搭建 Android测试环境需要搭建三个环境,Java,AndroidSDK,Android模拟器。 为什么要安装这三个环境? Java:Android的应用程序层使用的语言是…

理解Linux设备树(DTS)

DTS Dts:DTS即Device Tree Source,是一个文本形式的文件,用于描述硬件信息。一般都是固定信息,无法变更,无法overlay。 Dtsi:可以理解为dts的公共部分,添加、变更非常灵活。Dtsi包含在dts中。 …

基于 EasyOCR + HanLp 实现图片文字实体(中文姓名、机构名、地域名)识别

一、EasyOCR HanLp EasyOCR 是一个python版的文字识别工具。目前支持80中语言的识别。并且支持:图像预处理(去噪、色彩饱和度、尖锐处理)、CRAFT文字检测、中间处理(倾斜处理等)、文字识别、后续处理、输出结果。框架如下&#…

RHCE实验--ansible

第四章 1、使用debug模块,显示当前受管主机的dns服务器的ip地址。 2、将createuser.fact文件传输到受管主机上作为自定义事实变量文件(/etc/ansible/facts.d/),该文件的内容如下: [general] username wujing mima…

以太网 STP临时环路的产生、STP BPDU的转发过程、根桥故障案例分析。

2.10.2 以太网 传统STP生成树(STP临时环路、STP BPDU的转发过程、根桥故障案例) 传统STP生成树2.10.2 以太网 传统STP生成树(STP临时环路、STP BPDU的转发过程、根桥故障案例)STP临时环路:STP BPDU的转发过程&#xff…

多维数据分析

【数据挖掘】数据挖掘#商业智能(BI)数据分析挖掘概念 数据挖掘目前在各类企业和机构中蓬勃发展。因此我们制作了一份此领域常见术语总结。 分析型客户关系管理(Analytical CRM/aCRM): 用于支持决策,改善公司跟顾客的…

redis集群详细搭建方式(含原理、操作指令、异常处理)

目录 1.概述 2.配置 2.1.配置文件 2.2.合体 2.3.进入cli 3.集群操作 3.1.查看集群信息 3.2.集群中录入值 3.3.查询集群中的值 4.故障处理 1.概述 概念: redis集群是从3.0版本开始支持的一个功能,是redis的一种水平扩展方式,将全局数据分…

NNDL 作业12:第七章课后题

习题7-1在小批量梯度下降中,试分析为什么学习率要和批量大小成正比. 在小批量梯度下降中: 令,则: 因此我们要使得参数最优,则为最优的时候的常数,故学习率要和批量大小成正比。 习题7-2在Adam算法中,说明指数加权平均…

以太网 传统STP生成树的BPDU介绍、STP端口状态介绍与切换过程,STP详细的工作过程。

2.10.1 以太网 传统STP生成树(STP BPDU、STP端口状态、STP工作过程) STP生成树协议的之间的交互通过STP BPDU(根协议数据单元,Bridge Protocol Data Unit)进行。 传统STP生成树2.10.1 以太网 传统STP生成树&#xff0…

《码出高效》五 异常与日志

前言 本章主要是讲异常处理,关于异常主要有三个问题: 哪里发生异常 谁来处理异常 如何处理异常 围绕这三个问题就有了一套异常处理机制 异常分类 通常异常时针对不稳定代码的,并且需要区分类型 throw和throws的区别: 以此段代…

session条件竞争

PHP SESSION 的存储 Session会话存储方式 PHP将session以文件的形式存储服务器的文件中,session.save_path来控制 默认路径 /var/lib/php/sess_PHPSESSID /var/lib/php/sessions/sess_PHPSESSID /tmp/sess_PHPSESSID /tmp/sessions/sess_PHPSESSID session文件默…

PS图层+移动工具(2)复制删除快捷键 图层分组 前景色填充

查看此文前 你需要先读 PS图层移动工具(1)图层概念-拖动操作-移动工具基础 其实显示变换控件 这个配置相对 是容易造成错误操作 不小心就把文件拖动了 当我们想调这些时 可以直接 按住键盘上的 CtrlT 然后点击图层 这个操作框就出来了 然后调好之后 还是 直接用鼠标双击图层 就…

荧光染料Sulfo-Cyanine 7 Tyramide,Tyramide-Sulfo-Cy7,磺酸基-花青素Cy7 酪酰胺

一:产品描述 1、名称 英文:Sulfo-Cyanine 7 Tyramide,Tyramide-Sulfo-Cy7 中文:磺酸基-花青素Cy7 酪酰胺 2、所属分类:Cyanine 3、分子式:C43H51N3O8S2 4、分子量:802.01 5、质量控制&am…