DrGraph原理示教 - OpenCV 4 功能 - 阈值

普通阈值

OpenCV中的阈值用于相对于提供的阈值分配像素值。在阈值处理中,将每个像素值与阈值进行比较,如果像素值小于阈值则设置为0,否则设置为最大值(一般为255)。
在OpenCV中,有多种阈值类型可供选择,以下是一些常见的阈值类型:
二进制阈值化:选择一个特定的阈值量,大于该阈值的像素点的灰度值设定为最大值(如8位灰度值最大为255),小于该阈值的像素点的灰度值设定为0。
反二进制阈值化:与二进制阈值化相似,只是最后的设定值相反。在8位灰度图中,例如大于阈值的设定为0,而小于该阈值的设定为255。
截断阈值化:同样需要选择一个阈值,图像中大于该阈值的像素点被设定为该阈值,小于该阈值的保持不变。
阈值化为0:选择一个阈值,然后对图像做如下处理:1. 像素点的灰度值大于该阈值的不进行任何改变;2. 像素点的灰度值小于该阈值的,其灰度值全部变为0。
反阈值化为0:与阈值化为0类似,只是像素点的灰度值大于该阈值的不进行任何改变,而小于该阈值的,其灰度值全部变为0。
其实就是调用threshold()函数进行阈值处理,它有4个参数:
参数1:需要处理的原图,一般是灰度图。
参数2:设定的阈值。
参数3:最大阈值,一般为255。
参数4:阈值的方式,主要有5种,分别为cv.THRESH_BINARY、cv.THRESH_BINARY_INV、cv.THRESH_TRUNC、cv.THRESH_TOZERO、cv.THRESH_TOZERO_INV。

/** @brief Applies a fixed-level threshold to each array element.

The function applies fixed-level thresholding to a multiple-channel array. The function is typically
used to get a bi-level (binary) image out of a grayscale image ( #compare could be also used for
this purpose) or for removing a noise, that is, filtering out pixels with too small or too large
values. There are several types of thresholding supported by the function. They are determined by
type parameter.

Also, the special values #THRESH_OTSU or #THRESH_TRIANGLE may be combined with one of the
above values. In these cases, the function determines the optimal threshold value using the Otsu's
or Triangle algorithm and uses it instead of the specified thresh.

@note Currently, the Otsu's and Triangle methods are implemented only for 8-bit single-channel images.

@param src input array (multiple-channel, 8-bit or 32-bit floating point).
@param dst output array of the same size  and type and the same number of channels as src.
@param thresh threshold value.
@param maxval maximum value to use with the #THRESH_BINARY and #THRESH_BINARY_INV thresholding
types.
@param type thresholding type (see #ThresholdTypes).
@return the computed threshold value if Otsu's or Triangle methods used.

@sa  adaptiveThreshold, findContours, compare, min, max
 */
CV_EXPORTS_W double threshold( InputArray src, OutputArray dst,
                               double thresh, double maxval, int type );

5种阈值方式cv.THRESH_BINARY、cv.THRESH_BINARY_INV、cv.THRESH_TRUNC、cv.THRESH_TOZERO、cv.THRESH_TOZERO_INV的效果分别为
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
从别的地方看,threshold是处理灰度图,不过从实际运行情况【OpenCV 4.6】来看,彩色图也支持threshold,目测是针对各通道进行threshold后再合成结果图像。有时间看下源码就可以不用猜测了。
从头文件注释中可以看到

Also, the special values #THRESH_OTSU or #THRESH_TRIANGLE may be combined with one of the
above values. In these cases, the function determines the optimal threshold value using the Otsu's
or Triangle algorithm and uses it instead of the specified thresh.
@note Currently, the Otsu's and Triangle methods are implemented only for 8-bit single-channel images.

即THRESH_OTSU与THRESH_TRIANGLE可组合。这个的结果是8位单通道图,应该是在处理前就将其余类型图像转化为灰度图了
在这里插入图片描述
在这里插入图片描述

智能阈值

运行发现,THRESH_OTSU与THRESH_TRIANGLE的运算结果与阈值大小无关。
这有点象智能阈值,即阈值是智能或自动确定的。
而真正的智能阈值,也叫自适应阈值,是由adaptiveThreshold函数负责处理

/** @brief Applies an adaptive threshold to an array.

The function transforms a grayscale image to a binary image according to the formulae:
-   **THRESH_BINARY**
    \f[dst(x,y) =  \fork{\texttt{maxValue}}{if \(src(x,y) > T(x,y)\)}{0}{otherwise}\f]
-   **THRESH_BINARY_INV**
    \f[dst(x,y) =  \fork{0}{if \(src(x,y) > T(x,y)\)}{\texttt{maxValue}}{otherwise}\f]
where \f$T(x,y)\f$ is a threshold calculated individually for each pixel (see adaptiveMethod parameter).

The function can process the image in-place.

@param src Source 8-bit single-channel image.
@param dst Destination image of the same size and the same type as src.
@param maxValue Non-zero value assigned to the pixels for which the condition is satisfied
@param adaptiveMethod Adaptive thresholding algorithm to use, see #AdaptiveThresholdTypes.
The #BORDER_REPLICATE | #BORDER_ISOLATED is used to process boundaries.
@param thresholdType Thresholding type that must be either #THRESH_BINARY or #THRESH_BINARY_INV,
see #ThresholdTypes.
@param blockSize Size of a pixel neighborhood that is used to calculate a threshold value for the
pixel: 3, 5, 7, and so on.
@param C Constant subtracted from the mean or weighted mean (see the details below). Normally, it
is positive but may be zero or negative as well.

@sa  threshold, blur, GaussianBlur
 */
CV_EXPORTS_W void adaptiveThreshold( InputArray src, OutputArray dst,
                                     double maxValue, int adaptiveMethod,
                                     int thresholdType, int blockSize, double C );

参数说明如下:
src:输入图像。
dst:输出图像。
maxValue:使用CV_THRESH_BINARY和CV_THRESH_BINARY_INV的最大值。
adaptive_method:自适应阈值算法使用,可以选择CV_ADAPTIVE_THRESH_MEAN_C或CV_ADAPTIVE_THRESH_GAUSSIAN_C。
thresholdType:阈值类型,可以选择CV_THRESH_BINARY或CV_THRESH_BINARY_INV。
blockSize:邻域大小,默认值为3。
自适应阈值方法的思想是根据图像不同区域的亮度分布,计算其局部阈值,从而能够自适应地处理图像的不同区域。这种方法可以更好地处理明暗差异较大的图像,并且可以在一定程度上减轻光照不均对图像分割的影响。
通过调参方式查看的代码:

// [基本 - 智能阈值」类 - 滤镜处理
    dstMat = CvHelper::ChangeMatDim(dstMat, 1);
    int paramIndex = 0;
    int adaptiveMethod = GetParamValue_Int(paramIndex++); // 0 - 算法
    int thresholdType = GetParamValue_Int(paramIndex++);   // 1 - 类型
    int maxValue = GetParamValue_Int(paramIndex++);   // 2 - 最大值
    int blockSize = GetParamValue_Int(paramIndex++);       // 3 - 块大小
    if(blockSize % 2 == 0)
        blockSize++;
    int C = GetParamValue_Int(paramIndex++);     // 4 - 常数
    adaptiveThreshold(dstMat, dstMat, maxValue, adaptiveMethod, thresholdType, blockSize, C);

在这里插入图片描述
其实,阈值的原理不多,有个直观的感受即可。
运行效果:

OpenCV 4 功能 - 阈值

CSDN的视频上传后,模糊了不少,可能是免费的缘故吧,那就凑合用凑合看。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python编程-面向对象基础与入门到实践一书的内容拓展

Python编程-面向对象基础与入门到实践一书的内容拓展 通过编程,模拟现实生活中的事物编程,叫做面向对象编程,此过程也叫做实例化编程 简单类的创建 class Test():def __init__ (self,id):self.id iddef print_id(self):print(self.id)这里建…

基于Java SSM框架实现房屋租赁合同系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现房屋租赁合同系统演示 摘要 在网络高速发展的时代,众多的软件被开发出来,给用户带来了很大的选择余地,而且人们越来越追求更个性的需求。在这种时代背景下,人们对房屋租赁系统越来越重视,更好的…

信创之国产浪潮电脑+统信UOS Linux操作系统体验10:visual studio code中调试C++程序

☞ ░ 前往老猿Python博客 ░ https://blog.csdn.net/LaoYuanPython 一、引言 老猿在CSDN的《信创之国产浪潮电脑统信UOS操作系统体验2:安装visual studio code和cmake搭建C开发环镜》介绍了在国产浪潮电脑统信UOS操作系统中安装visual studio code和cmake搭建C开…

数据结构期末复习(2)链表

链表 链表(Linked List)是一种常见的数据结构,用于存储一系列具有相同类型的元素。链表由节点(Node)组成,每个节点包含两部分:数据域(存储元素值)和指针域(指…

Portraiture4.1汉化版PS磨皮插件(支持原生m1芯片m2)

Portraiture汉化版PS磨皮插件。本期推荐一款全新ai算法ps2024中文汉化版ps磨皮插件Portraiture 4.1.2美颜滤镜安装包最新版ps调整肤色插件! 全新Portraiture 4.1.2版本PS人像修图美颜磨皮插件,升级AI算法,并支持多人及全身磨皮美化模式,推荐…

UG NX二次开发(C#)-Ufun和NXOpen混合编程

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1、前言2、Ufun函数3、 NXOpen4、混合编程实现1、前言 在UG NX二次开发过程中,采用Ufun功能比较简单,能用比较少的代码实现我们需要的功能,但是ufun函数的功能不是很强大,尤其随着UG NX的版本…

【深度学习:LSTM Networks】了解 LSTM 网络

【深度学习:LSTM Networks】了解 LSTM 网络 循环神经网络长期依赖问题 相关知识传送门: LSTM 网络LSTM 背后的核心理念LSTM 分步演练长短期记忆的变体Conclusion 循环神经网络 人类在思考时并不是每时每刻都从头开始。当你阅读这篇文章时,你…

波特云 集装箱和 海恒蓝 集装箱 自动化集装箱下单方案

背景: 这几天 遇到了一个客户 是做外贸的 需要大量多的集装箱,了解后 他们是需要在平台上 下单集装箱 才有可能预约到集装箱使用,所以公司每天都需要都需要派个人 盯着电脑来 下单集装箱。 波特云 网站:https://www.eportyun.com…

Springboot配置http-Only

项目框架 jdk1.8、springboot2.5.10 情况一 项目中未使用(权限认证框架:Sa-Token) application.yml文件内增加配置 server.servlet.session.cookie.http-onlytrueserver.servlet.session.cookie.securetrue (此条配置建议也加上) 情况二…

Vue:Vue与VueComponent的关系图

1.一个重要的内置关系&#xff1a;VueComponent.prototype.proto Vue.prototype 2.为什么要有这个关系&#xff1a;让组件实例对象&#xff08;vc&#xff09;可以访问到 Vue原型上的属性、方法。 案例证明&#xff1a; <!DOCTYPE html> <html lang"en"&…

2024年【制冷与空调设备运行操作】考试及制冷与空调设备运行操作免费试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年【制冷与空调设备运行操作】考试及制冷与空调设备运行操作免费试题&#xff0c;包含制冷与空调设备运行操作考试答案和解析及制冷与空调设备运行操作免费试题练习。安全生产模拟考试一点通结合国家制冷与空调设…

FA模板制作

1、链接克隆模板的制作 &#xff08;1&#xff09;安装一个全新的Windows 10&#xff0c;挂载并安装tools&#xff0c;关闭防火墙 &#xff08;2&#xff09;挂载FusionAccess_WindowsDestop_Install_6.5.1.iso后启用本地Administrator本地超管&#xff0c;切换为本地超管&am…

车牌识别系统设计与实现

车牌识别系统设计与实现 项目概述 本项目旨在设计和实现一套车牌识别系统&#xff0c;通过使用车牌字符数据集进行训练&#xff0c;应用OpenCV、CNN&#xff08;卷积神经网络&#xff09;和PyQt5技术&#xff0c;实现车牌图像的预处理、位置选定、定位、字符分割和最终的车牌…

微信小程序自定义步骤条效果

微信小程序自定义一个步骤条组件&#xff0c;自定义文字在下面&#xff0c;已完成和未完成和当前进度都不一样的样式&#xff0c;可点击上一步和下一步切换流程状态&#xff0c;效果如下。 这是视频效果&#xff1a; 前端实现步骤条效果 下面我们一步步实现编码&#xff0c;自定…

最新解决msvcr100.dll丢失的方法,多种解决方法详细解析

msvcr100.dll丢失会导致某些程序或游戏无法正常运行&#xff0c;msvcr100.dll是Microsoft Visual C 2010的运行时组件&#xff0c;它包含了许多C标准库的函数实现。这些函数在程序运行时被调用&#xff0c;用于处理各种任务&#xff0c;如字符串操作、数学计算、文件操作等。因…

fastApi 项目部署

方式一&#xff0c;Uvicorn部署 Run a Server Manually - Uvicorn - FastAPI 1&#xff0c;linux服务器安装 python>3.8 2&#xff0c;安装 uvicorn : pip install "uvicorn[standard]" 3&#xff0c;上传项目到服务器 main.py from typing imp…

计算机专业个人简历范文(8篇)

HR浏览一份简历也就25秒左右&#xff0c;如果你连「好简历」都没有&#xff0c;怎么能找到好工作呢&#xff1f; 如果你不懂得如何在简历上展示自己&#xff0c;或者觉得怎么改简历都不出彩&#xff0c;那请你一定仔细读完。 互联网运营个人简历范文> 男 22 本科 AI简历…

【深度学习:Recurrent Neural Networks】循环神经网络(RNN)的简要概述

【深度学习】循环神经网络&#xff08;RNN&#xff09;&#xff1a;连接过去与未来的桥梁 循环神经网络简介什么是循环神经网络 (RNN)&#xff1f;传统 RNN 的架构循环神经网络如何工作&#xff1f;常用激活函数RNN的优点和缺点RNN 的优点&#xff1a;RNN 的缺点&#xff1a; 循…

关于Python里xlwings库对Excel表格的操作(二十五)

这篇小笔记主要记录如何【如何使用xlwings库的“Chart”类创建一个新图表】。 前面的小笔记已整理成目录&#xff0c;可点链接去目录寻找所需更方便。 【目录部分内容如下】【点击此处可进入目录】 &#xff08;1&#xff09;如何安装导入xlwings库&#xff1b; &#xff08;2…

认识Linux指令之 “cp” 指令

01.cp指令&#xff08;重要&#xff09; 语法&#xff1a;cp [选项] 源文件或目录 目标文件或目录 功能: 复制文件或目录 说明: cp指令用于复制文件或目录&#xff0c;如同时指定两个以上的文件或目录&#xff0c;且最后的目的地是一个已经存在的目录&#xff0c;则它会把…
最新文章