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

图像的二值化 1、CV_THRESH_BINARY                   即大于阈值就设置成M,反之为0; 2、CV_THRESH_BINARY_INV           是上面的相反; 3、CV_THRESH_TRUNC                   大于阈值就设置成M,反之保持不变; 4、CV_THRESH_TOZERO_INV        大于阈值就设置成0,反之保持不变; 阅读详情

普通阈值

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 功能 - 阈值

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

【笔记】opencv阈值处理 threshold函数 cv2.THRESH_BINARY ,cv2.THRESH_TRUNC) cv2.adaptiveThreshold() 像素是在模拟图像数字化时对连续空间进行离散化得到的。每个像素具有整数行(高)和列(宽)位置坐标,同时每个像素都具有整数灰度值或颜色值。 二值化阈值处理(cv2.THRESH_BINARY) 二值化阈值处理会将原始图像处理为仅有两个值的二值图像,其针对像素点的处理方式为:在8位图像中,最大值是255。因此,在对8位灰度图像进行二值化时,如果将阈值设定为127,那么: ● 所有大于127的像素点会被处理为255。 ● 其余值会被处理为0。 阈值设置为210: 设置为240: 反二值化阈值处理(cv2.THR 阅读详情

相关推荐

普冉(PUYA)单片机开发笔记 [完结篇]:使用体会

这一篇是 PY32F003 应用实验的完结篇,总结了对这颗 MCU 的使用体会。我已经把自己实验用的代码打包上传,供各位码神参考。

Tomcat0130 - 代码生涯 9603

「机器视觉」学习笔记 - Thresholding Techniques- 图像阈值

「机器视觉」学习笔记 - Thresholding Techniques

qq_30691353的博客 1260

基于BS21的星闪模块设计电路SLE/BLE

基于BS21的星闪模块设计电路SLE/BLE HI2821

2503_91889531的博客 2738

OpenCV-Python 图像阈值 | 十五

目标 在本教程中,您将学习简单阈值,自适应阈值和Otsu阈值。 你将学习函数cv.threshold和cv.adaptiveThreshold。 简单阈值 在这里,问题直截了当。对于每个像素,应用相同的阈值。如果像素值小于阈值,则将其设置为0,否则将其设置为最大值。函数cv.threshold用于应用阈值。第一个参数是源图像,它应该是灰度图像。第二个参数是阈值,用于对像素值进行分类。第三...

TensorFlowNews 1521

YOLOv8 + TensorRT 实战:手把手教你用 C++ 实现实时视频流目标检测(附完整项目代码)

本文详细介绍了如何将YOLOv8与TensorRT结合,通过C++实现实时视频流目标检测的全流程。从环境配置、模型转换优化到视频处理架构设计,手把手教你构建高性能检测系统,并附完整项目代码。特别针对Windows平台下的TensorRT模型加速部署提供了实用技巧和性能优化方案。

weixin_29051193的博客 345

告别社区5级:一个脚本搞定小米/红米BL解锁的账号绑定限制(附资源下载与避坑指南)

本文提供了一种绕过小米/红米设备Bootloader解锁社区等级限制的技术方案,适用于MIUI 12.5-14和HyperOS 1.0系统。通过自动化脚本临时修改系统组件,用户可快速完成账号绑定和设备解锁流程,附详细操作指南和常见问题解决方案。

weixin_27330481的博客 730

OpenCV-Python 学习-------阈值处理

目录1.阈值处理1.1 threshold函数1.1.1二值化阈值处理(cv.THRESH_BINARY)1.1.2 反二值化阈值处理(cv.THRESH_BINARY_INV)1.1.3截断阈值化处理(cv.THRESH_TRUNC)1.1.4 超阈值零处理(cv.THRESH_TOZERS_INV)1.1.5 低阈值零处理(cv.THRESH_TOZERO)1.2 自适应阈值处理1.3 Otsu处理 1.阈值处理 1.1 threshold函数 1.1.1二值化阈值处理(cv.THRESH_BINARY

lt405514623的博客 631

保姆级教程:在SIwave 2024 R2中搞定TDR仿真,手把手教你分析USB 3.0差分线阻抗

本文提供了一份详细的SIwave 2024 R2 TDR仿真教程,重点讲解如何分析USB 3.0差分线阻抗。从项目准备、参数配置到结果分析,逐步指导工程师完成完整的仿真流程,并分享实战经验和高级技巧,帮助提升信号完整性分析能力。

weixin_33670786的博客 496

二值化函数cvThreshold()参数CV_THRESH_OTSU的疑惑【转】

查看OpenCV文档cvThreshold(),在二值化函数cvThreshold(const CvArr*src, CvArr*dst, doublethreshold, doublemax_value, intthreshold_type)中,参数threshold_type有5种类型: THRESH_BINARY THRESH_BINARY_INV ...

andaren6337的博客 1758

FIFO Generate IP核使用——FIFO写操作详解及Status Flags页配置

本文介绍了FIFO的写操作及Status Flags页的配置信息。

u011565038的博客 2283

半导体物理-Si晶体生长方向<2>

Si(硅)晶体的生长方向是一个重要的概念,尤其在半导体工业中。这个概念涉及到晶体在生长过程中原子排列的方向,对晶体的性质和应用有重大影响。让我为您详细解释:理解Si晶体的生长方向对于半导体材料的研究和应用非常重要,它直接影响了最终器件的性能和制造工艺。在实际应用中,选择适当的生长方向可以优化器件性能,提高产品质量。

m0_37606066的博客 2990

DrGraph原理示教 - OpenCV 4 功能 - 二值化

二值化,也就是处理结果为0或1,当然是针对图像的各像素而言的1或0,对应于有无,也就是留下有用的,删除无用的,有用的部分,就是关心的部分在图像处理中,也不仅仅只是1或0,因为这两个值看起来都是黑的,人眼很难分辨清楚,那就放大一些,255或0,黑白就出来了目标识别、图像分割、目标提取等后续应用,很多会基于二值化的结果。所以图像分析的二值化处理是一个重要环节。

drgraph的博客 734

阿里九宫格验证码 (Baxia SecCaptcha) 逆向工程与自动化求解

实现对阿里巴夏 (Baxia) 九宫格点击验证码的全自动求解模式说明依赖浏览器模式通过 Puppeteer/Playwright 控制真实浏览器,享有完整 DOM/Canvas/WASM 环境需要 Chrome/Chromium纯算模式脱离浏览器,通过 HTTP API + Node.js WASM 解密完成求解无需浏览器。

猫敷雪 378

二值化函数cvThreshold()参数CV_THRESH_OTSU的疑惑

查看OpenCV文档cvThreshold(),在二值化函数cvThreshold(const CvArr* src, CvArr* dst, double threshold, double max_value, int threshold_type)中,参数threshold_type有5种类型: THRESH_BINARY THRESH_BINARY_INV THRESH_

hbspring007的专栏 1268

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

OpenCV Tutorial: 自適應閾值(threshold、CV_THRESH_OTSU)

自適應閾值(threshold、CV_THRESH_OTSU) 所謂的二值化是將影像進行區分,分成我們感興趣的部分(前景),以及不感興趣的部分(背景),通常將某個強度當作分割的標準,這個強度稱作閾值(threshold),通常以強度超過閾值的像素當作前景,反之則為背景。 閾值的算法主要分兩類: 固定閾值:程式或使用者直接給定一個灰階值當閾值,再用這個閾值進行二值化。自適應閾值:輸入影像,

GPU全栈博主 1万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

cvThreshold()

cvThreshold是opencv库中的一个函数  threshold_typ本函数支持的对图像取阈值的方法由 threshold_type 确定:threshold_type=CV_THRESH_BINARY:dst(x,y) = max_value, if src(x,y)>threshold 0, otherwise.threshold_type=CV_THRESH_BINARY_INV:dst(x,y) = 0, if src(x,y)>threshold; dst(x,y) = max_valu

斯凡的专栏 8695

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

OpenCV学习笔记-图像二值化

图像的二值化就是将图像上的像素点的灰度值设置为0或255,这样将使整个图像呈现出明显的黑白效果。在数字图像处理中,二值图像占有非常重要的地位,图像的二值化使图像中数据量大为减少,从而能凸显出目标的轮廓。 图像二值化的类型有以下几种: 0: THRESH_BINARY 当前点值大于阈值时,取Maxval,也就是第四个参数,下面再不说明,否则设置为0 1: THRESH_BINAR...

云中寻雾的博客 3728

OpenCV 阈值化操作cvThreshold 和 自适应阈值cvAdaptiveThreshold操作

载入一幅图片,使用cvThreshold函数对其进行操作,设置阈值为128。 使用自适应阈值进行同样操作 #include #include #include #include using namespace std; using namespace cv; int main(int argc, const char * argv[]) { /*1.载入图像*/

u011559236的博客 1270

OpenCV基础——threshold函数的使用

图像的二值化就是将图像上的像素点的灰度值设置为0或255,这样将使整个图像呈现出明显的黑白效果。在数字图像处理中,二值图像占有非常重要的地位,图像的二值化使图像中数据量大为减少,从而能凸显出目标的轮廓。OpenCV中提供了函数cv::threshold(); 注意:作者采用OpenCV 3.0.0 函数原型 参数说明 src:源图像,可以为8位的灰度图,也可以为

我不是校长的博客 22万+

OpenCV学习之阈值化

OpenCV中图像阈值处理有两个函数,cvThreshold和cvAdaptiveThreshold。图像处理中可能最重要的一步就是图像的二值化处理,既然需要将图像二之化,那么就不得不使用这两个函数。 1.cvThreshold 函数原型如下: doublecvThreshold( const void* srcarr, void* dstarr, double thresh, ...

weixin_30877755的博客 322

opencv二值化函数cvThreshold

文章转自http://blog.sina.com.cn/s/blog_8fc98fe501010vse.html 对图像二值化函数cvThreshold的理解 Threshold 对数组元素进行固定阈值操作 void cvThreshold( const CvArr* src, CvArr* dst, double threshold, double max_value

890

图像处理——去除图像上杂乱的干扰(庖丁解牛)

图像处理——去除图像上杂乱的干扰(庖丁解牛) 源码地址:图像处理——去除图像上杂乱的干扰 庖丁解牛 1. #include <opencv2/opencv.hpp> 2. #include <opencv2/highgui/highgui_c.h> 3. #include <iostream> 前三行是将库文件的头文件加载进来,头文件里包含着大量的声明,面向...

JonNoah的博客 5064

DrGraph原理示教 - OpenCV 4 功能 - 颜色空间

前段时间,甲方提出明确需求,让把软件国产化。稍微研究了一下,那就转QT开发,顺便把以前的功能代码重写一遍。至于在Ubuntu下折腾QT、OpenCV安装事宜,网上文章很多,照猫画虎即可。QT 6支持C++ 17,里面很多C++的新功能,用起来更为舒爽。QT Creator中,代码提示更快捷,代码折叠也很准确QT Creator中,文档生成更方便,配合Doxygen之后,自己都感觉更专业了当然,更让我高兴的是,QT直接支持最新版的OpenCV,以前还一直停留在2.3版。

drgraph的博客 1442

DrGraph原理示教 - OpenCV 4 功能 - 直方图

OpenCV直方图是一种可以对整幅图的灰度分布进行整体了解的图示。它是带有像素值(从0到255,不总是)的图在X轴上,在y轴上的图像对应的像素个数。通过观察图像的直方图,我们可以直观的了解图像的对比度、亮度、亮度分布等。在直方图中,横坐标表示图像中各个像素点的灰度级,纵坐标表示具有该灰度级的像素个数。直方图的左边部分显示了图像中较暗像素的数量,右边区域显示了更明亮的像素。直方图是非常常用的图像处理方法,有时在很多图像预处理中能起到特别好的效果。

drgraph的博客 1361

BS版图形系统 - 界面控件配置

BS版图形系统 - 界面控件配置界面控件考虑资源配置化XML资源配置加载下一步任务 QQ: 282397369 界面控件考虑 有了属性浏览器,下来就该处理工具栏了。 一个直观感觉,网页留给程序的空间,要比应用程序少。网页在浏览器这个程序中运行,不同的浏览器,提供相应的界面,占据标题、工具栏位置,甚至书签与侧栏。所以做网页程序的时候,尽量能将工作区整大一些。 当然,如何整应该是UI设计的事,技术层面还是关心如何实现的问题。 在属性浏览器的基础上,初步实现了一个VCL的JS框架。但新建控件,还是要写一堆代码来控

drgraph的博客 1270
上一篇: DrGraph原理示教 - OpenCV 4 功能 - 单通道图
下一篇: DrGraph原理示教 - OpenCV 4 功能 - 二值化
DrGraph
博客等级 码龄14年 228粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值