【C++的OpenCV】第九课-OpenCV图像常用操作(六):图像形态学-阈值的概念、功能及操作(threshold()函数))

news2024/11/26 18:27:43

目录

  • 一、阈值(thresh)的概念
  • 二、阈值在图形学中的用途
  • 三、阈值的作用和操作
    • 3.1 在OpenCV中可以进行的阈值操作
    • 3.2 操作实例
      • 3.2.1 threshold()函数介绍
      • 3.2.2 实例
      • 3.2.3 结果


上节课的内容(作者还是鼓励各位同学按照顺序进行学习哦):【C++的OpenCV】第八课-OpenCV图像常用操作(五):图像形态学-图像金字塔(Gaussian pyramid、Laplacian pyramid)和向上(下)采样的使用和原理


一、阈值(thresh)的概念

  • 首先,顾名思义,“”就是范围或者限制,所以,“阈值”就是某个限制的值(该值具有一定的数学含义,即“临界值”,例如车辆限高杆的高度就是一种阈值,不可超越;亦或者1.1米以下儿童不收费,超过1.1就要收费。)
    在这里插入图片描述
  • 其次,图形学中的阈值,往往指某个你想要设置的像素值。

二、阈值在图形学中的用途

        图像阈值进程被用于图像分离领域,根据某个确定的阈值,将图像进行分离,从而得到感兴趣的区域。
在这里插入图片描述

        当然基于这个思想,还可以应用于更深更高的领域,例如医学图像分析等领域。总之,其应用价值非常高。就像前一章的内容一样。


三、阈值的作用和操作

3.1 在OpenCV中可以进行的阈值操作

        我们接下来用图像和函数公式来尽可能的表达其原理和功能。
        注意,以下的图像中,红色实线为设置的阈值!

  • 二进制模式

    • 模式介绍:
      在这里插入图片描述
    • 解释:
              当源图像的像素值大于阈值时,处理后的图像中这些像素点均取最新设置的最大值像素作为结果,如果源图像的像素值小于或者等于阈值,则结果图像中的该像素值为0。
    • 图示:
      • 处理前像素值数据:
        在这里插入图片描述

      • 处理后像素值数据:
        在这里插入图片描述

  • 二进制倒置

    • 模式介绍:
      在这里插入图片描述
    • 解释:
              和像素二进制模式完全相反即可! 即:当源图像的像素值大于阈值时,结果图像对应的像素值为0,当源图像的像素值小于等于阈值时,结果图像对应的阈值取提前设置好的MaxValue(最大值)。
    • 图示:
      • 处理前像素值数据:
        在这里插入图片描述
      • 处理后像素值数据:
        在这里插入图片描述
  • 阈值截短

    • 解释:
              即一句话,把所有高于阈值的像素点的值都设置为等于阈值,其余像素值不变
    • 图示:
      • 处理前的图像数据:
        在这里插入图片描述
      • 处理后的图像数据:
        在这里插入图片描述
  • 零阈值

    • 模式介绍:
      在这里插入图片描述

    • 解释:
              源图像中低于或者等于阈值的像素被设置为0

    • 图示:

      • 处理前的图像数据:
        在这里插入图片描述
      • 处理后的图像数据:
        在这里插入图片描述
  • 零阈值倒置

    • 模式介绍:
      在这里插入图片描述
    • 解释:将上边0阈值的数据反过来即可,即:当源图像像素值大于阈值时,生成的图片对应像素位置的值为0;反之,保留原像素值。
    • 图示:
      • 处理前图像的数据:
        在这里插入图片描述
      • 处理后图像的数据:
        在这里插入图片描述

3.2 操作实例

3.2.1 threshold()函数介绍

  • 函数原型:
double cv::threshold(
						InputArray src,
						OutputArray dst,
						double 	thresh,
						double 	maxval,
						int 	type 
					)	
  • 参数解释:
    • src : 原始图像
    • dst:处理后的图像
    • thresh:阈值
    • maxval:像素最大值,即上文中提到的MaxValue
    • type:阈值处理的方式,在这里,上文中提到的几种阈值模式由以下整数对应:
      • 0: Binary ,二进制模式
      • 1: Binary Inverted,二进制倒置
      • 2: Threshold Truncated,阈值截短
      • 3: Threshold to Zero,零阈值
      • 4: Threshold to Zero Inverted,零阈值倒置

3.2.2 实例

参考源代码:示例源码

#include "opencv2/imgproc.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"
using namespace cv;

int main(void)
{
    Mat srcImg = imread("/home/aelx-chen/demo.jpg");
    Mat grayImg;
    Mat dstImg;
    cvtColor(srcImg, grayImg, COLOR_BGR2GRAY);

    threshold(grayImg, dstImg, 90, 255, 1);
    /*
        将原图像,设置阈值为90,最大阈值为255,采用二进制方式处理
    */

    imshow("source image",srcImg);
    imshow("gray image",grayImg);
    imshow("destination image",dstImg);
    waitKey(0);
    return 0;
}

3.2.3 结果

在这里插入图片描述

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

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

相关文章

易基因|m6A RNA甲基化研究的数据挖掘思路:干货系列

大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。关于m6A甲基化研究思路(1)整体把握m6A甲基化图谱特征:m6A peak数量变化、m6A修饰基因数量变化、单个基因m6A peak数量分析、m6A peak在基因元件上的分布…

IP协议的漏洞及防护措施

文章目录一、TCP/IP协议族二、IP协议三、IP协议的安全问题及防护措施一、TCP/IP协议族 二、IP协议 网际协议(Internet Protocol,IP)是TCP/IP协议族的核心,也是网际层最重要的协议。 IP数据报由首部和数据两部分组成&#xff1b…

Spark性能优化五 算子优化

文章目录(一)map 和 mapPartitions(二)foreach 和 foreachPartition(三)repartition的使用(四)reduceByKey 和 groupByKey的区别(一)map 和 mapPartitions m…

解决Visual C++ Redistributable安装找不到vc_runtimeMinimum_x86.msi最简单办法

今天在安装Fritzing的时候,遇到了需要Visual C Redistributable支持包,所以就动手安装,发现居然不能安装,安装几次居然错误提示所需要的安装包*.MSI的居然名称还不用。我也是下载了各种版本来试图靠运气过关,结果失败告…

Linux下安装prometheus grafana

1 安装prometheus1.1 下载prometheus下载地址https://prometheus.io/download/#prometheus下载wget https://github.com/prometheus/prometheus/releases/download/v2.42.0/prometheus-2.42.0.linux-amd64.tar.gz1.2 安装# 新建目录,并进入目标目录 mkdir -p /middl…

Java语言如何求平方根

问题 在编程时,会遇到求平方根的问题,本次问题讲到如何使用Java来求解平方根。 方法 使用java.lang.Math类的sqrt(double)方法求平方根。Math是java.lang包中的类,所以就可以直接使用这个类。Double为对象中的基本类型。例如求正整数16的平方…

Vue 2

文章目录1. 简介2. 第一个Vue程序3. 指令3.1 判断循环3.2 操作属性3.3 绑定事件3.4 表单中数据双向绑定3.5 其他内置指令3.6 自定义指令4. 组件4.1 全局注册4.2 局部注册4.3 组件通讯4.4 单文件组件5. 组件插槽5.1 单个插槽5.2 具名插槽5.3 作用域插槽6. 内置组件6.1 component…

智能客服系统:为企业提升客户满意度

随着科技的不断进步,电话营销、呼叫中心机器人、语音自助服务等领域的智能客服系统也得到了飞速的发展。这些技术的出现,让企业能够更加高效地管理客户服务,提高客户满意度,从而在市场竞争中占据优势。 电话营销是企业推广产品、服…

g2o源码阅读

之前写的g2o源码阅读笔记,分享给有需要的人 整个文档请自行下载,这里只贴一个图片。

微信小程序第一节 —— 自定义顶部、底部导航栏以及获取胶囊体位置信息。

一、前言 大家好!我是 是江迪呀。我们在进行微信小程序开发时,常常需要自定义一些东西,比如自定义顶部导航、自定义底部导航等等。那么知道这些自定义内容的具体位置、以及如何适配不同的机型就变得尤为重要。下面让我以在iPhone机型&#x…

Word处理控件Aspose.Words功能演示:使用 C# 拆分 MS Word 文档

Aspose.Words 是一种高级Word文档处理API,用于执行各种文档管理和操作任务。API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsoft Word。此外, Aspose API支持流行文件格式处…

Python——列表排序和赋值

(1)列表排序: 列表排序方法 ls.sort() 对列表ls 中的数据在原地进行排序 ls [13, 5, 73, 4, 9] ls.sort()ls.sort(reverseFalse) 默认升序,reverseTrue,降序 ls [13, 5, 73, 4, 9] ls.sort(reverseTrue)key指定排序时…

小红书「高效达人筛选攻略」

三八女神节降临,诸多品牌纷纷开启铺垫预热,在各大平台借势宣传。而聚集庞大年轻女性消费群体的小红书,对“她营销”的重要性不言而喻。节点序幕拉开,面对海量达人信息,如何提前积草屯粮、高效备战? 本期千瓜…

【数据结构】链表:看我如何顺藤摸瓜

👑专栏内容:数据结构⛪个人主页:子夜的星的主页💕座右铭:日拱一卒,功不唐捐 文章目录一、前言二、链表1、定义2、单链表Ⅰ、新建一个节点Ⅱ、内存泄漏Ⅲ、插入一个节点Ⅳ、销毁所有节点Ⅴ、反转一个链表3、…

云his系统源码 SaaS应用 基于Angular+Nginx+Java+Spring开发

云his系统源码 SaaS应用 功能易扩 统一对外接口管理 一、系统概述: 本套云HIS系统采用主流成熟技术开发,软件结构简洁、代码规范易阅读,SaaS应用,全浏览器访问前后端分离,多服务协同,服务可拆分&#xff…

【Linux要笑着学】进程创建 | 进程终止 | slab分派器

爆笑教程《看表情包学Linux》👈 猛戳订阅!​​​​​​​​​​​​💭 写在前面:本章我们主要讲解进程的创建与终止。首先讲解进程创建,fork 函数是我们早在讲解 "进程的概念" 章节就提到过的一个函数&#…

总结篇 字符串设备(一)

简介 1、字符设备是Linux驱动中最基本的一类设备驱动,字符设备就是一个个字节,按照字节流进行读写操作的设备。(例:按键,电池等,IIC,SPI,LCD)。这些设备的驱动就叫字符设备驱动。 在…

八股文(二)

一、 实现深拷贝和浅拷贝 1.深拷贝 function checkType(any) {return Object.prototype.toString.call(any).slice(8, -1) }//判断拷贝的要进行深拷贝的是数组还是对象,是数组的话进行数组拷贝,对象的话进行对象拷贝 //如果获得的数据是可遍历的&#…

小白推荐!必定成功的python的安装流程?

目录 1.安装教程 2.使用cmd测试是否安装成功,快捷键WinR 3.如果测试失败,如何卸载? 4.如何在pycharm中指定下载的python解释器路径? 5.第一条python语句 1.安装教程 1.前往python的官网(弄个梯子可能会快一点&#xf…

spring boot + rabbitMq整合之死信队列(DL)

rabbit mq 死信队列 什么是死信队列? DL-Dead Letter 死信队列 死信,在官网中对应的单词为“Dead Letter”,可以看出翻译确实非常的简单粗暴。那么死信是个什么东西呢? “死信”是RabbitMQ中的一种消息机制,当你在消费消息时&…