opencv c++ 二值图像、阈值计算方法、全局阈值、自适应阈值

article/2025/9/19 14:09:01

1、图像定义:

彩色图像 :三通道,像素值一般为0~255;

灰度图像:单通道,像素值一般为0~255;

二值图像:单通道,像素值一般为0(黑色)、255(白色);

彩色图像颜色范围查询表:

2、图像阈值分割方法

设原图的像素值分布为如下红色区域,蓝色的线表示像素值阈值T。

2.1、二值分割

a)大于阈值T的像素点置满保留,其余置0。b)小于阈值T的像素点置满保留,其余去除。

         

2.2、其余阈值图像分割方法

a)大于阈值T的像素点值置为阈值。          b)小于阈值T的像素点值置0。

         

c)大于阈值T的像素点值置0。

 API

threshold(灰度图, 输出图像, 阈值, 图像最大像素值, 阈值分割方法);

阈值分割方法:

 2.3、代码:

void QuickDemo::zero_one_img(Mat& image)
{Mat gray;cvtColor(image, gray, COLOR_BGR2GRAY);namedWindow("gray", WINDOW_FREERATIO);imshow("gray", gray);Mat binary;threshold(gray, binary, 127, 255, THRESH_BINARY);namedWindow("THRESH_BINARY", WINDOW_FREERATIO);imshow("THRESH_BINARY", binary);threshold(gray, binary, 127, 255, THRESH_BINARY_INV);namedWindow("THRESH_BINARY_INV", WINDOW_FREERATIO);imshow("THRESH_BINARY_INV", binary);threshold(gray, binary, 127, 255, THRESH_TRUNC);namedWindow("THRESH_TRUNC", WINDOW_FREERATIO);imshow("THRESH_TRUNC", binary);threshold(gray, binary, 127, 255, THRESH_TOZERO);namedWindow("THRESH_TOZERO", WINDOW_FREERATIO);imshow("THRESH_TOZERO", binary);threshold(gray, binary, 127, 255, THRESH_TOZERO_INV);namedWindow("THRESH_TOZERO_INV", WINDOW_FREERATIO);imshow("THRESH_TOZERO_INV", binary);
}

 3、阈值计算方法

        在图像阈值分割时,需要选取一个合适的阈值,基本分为全局阈值自适应阈值两大类。

3.1 全局阈值法

        均值法:统计图像像素值的均值作为阈值。

void zero_one_img(Mat& image)
{Mat gray;cvtColor(image, gray, COLOR_BGR2GRAY);Scalar m = mean(gray);//printf("means : %2f\n", m[0]);Mat binary;threshold(gray, binary, m[0], 255, THRESH_BINARY);namedWindow("THRESH_BINARY", WINDOW_FREERATIO);imshow("THRESH_BINARY", binary);
}

        OTSU法(基于最小类内方差求阈值的方法):基于像素直方图的统计结果,统计各像素点值的方差值,选类内方差最小的像素点值作为阈值。

        如下对像素点值为2的像素点求类内方差的过程:

       a)分别 计算该像素点值左边、右边的比重,均值,方差。

         b)计算类内方差:

        

void QuickDemo::zero_one_img(Mat& image)
{Mat gray;cvtColor(image, gray, COLOR_BGR2GRAY);namedWindow("gray", WINDOW_FREERATIO);imshow("gray", gray);Mat binary;threshold(gray, binary, 0, 255, THRESH_BINARY|THRESH_OTSU);namedWindow("THRESH_OTSU", WINDOW_FREERATIO);imshow("THRESH_OTSU", binary);
}

      Triangle法:获取如下直方图后,从最高点到最低点作一线段,以α和β为45°为前提,寻找右图上使得d最大的线段,将此时α角点的像素点值作为阈值。

        注:在常规操作时,为了使得像素点值不过于靠近最多的像素点值,常常将其向右偏移20%的总像素距离。

void QuickDemo::zero_one_img(Mat& image)
{Mat gray;cvtColor(image, gray, COLOR_BGR2GRAY);namedWindow("gray", WINDOW_FREERATIO);imshow("gray", gray);Mat binary;threshold(gray, binary, 0, 255, THRESH_BINARY|THRESH_TRIANGLE);namedWindow("THRESH_OTSU", WINDOW_FREERATIO);imshow("THRESH_OTSU", binary);
}

 

        适用情况总结:OTSU法适用于有多峰直方图的图像,三角法使用有单峰直方图的图像。

 3.2、自适应阈值

        采用卷积的方式,对图像逐个窗口的中心像素点值进行阈值处理,此时的每个窗口的阈值方法有窗口均值阈值法、高斯分布阈值法。

        API:

CV_EXPORTS_W void adaptiveThreshold( InputArray src, OutputArray dst,double maxValue, int adaptiveMethod,int thresholdType, int blockSize, double C );

maxValue ——赋予给满足条件的像素的非零值。
AdaptiveMethod ——要使用的自适应阈值算法, 如下:


thresholdType ——阈值分割方法,这里只能使用THRESH_BINARY等方法,不能使用OTSU法。
blockSize——用于计算像素阈值的像素邻域的大小:3、5、7 等。
C ——计算后均值被减去的值,如 threshvalure - C,C常为正数

 代码:

void QuickDemo::zero_one_img(Mat& image)
{Mat gray;cvtColor(image, gray, COLOR_BGR2GRAY);namedWindow("gray", WINDOW_FREERATIO);imshow("gray", gray);Mat binary;adaptiveThreshold(gray, binary, 255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY,3,0);namedWindow("adaptiveThreshold", WINDOW_FREERATIO);imshow("adaptiveThreshold", binary);
}

 


http://chatgpt.dhexx.cn/article/QdLSynxQ.shtml

相关文章

图像分割 - 阈值处理 - 全局阈值处理

目录 1. 介绍 2. 代码实现 3. 代码讲解 1. 介绍 当目标和背景像素的灰度分布非常不同的时候,可以对整个图像使用全局阈值 在大多数的应用中,图像之间通常存在足够的变化,全局阈值是一种合适的办法。所以,需要一种对图像做阈值…

硬阈值 软阈值

1 定义 1.1 硬阈值 硬阈值的定义如下: 相当于 1.2 软阈值 软阈值的定义如下: 相当于 1.3 二者对比(可视化解释) 这是一张很经典地表述软阈值和硬阈值区别的图,其中软阈值是蓝色的线,他没有突变&#xff1…

神经网络阈值是什么意思,神经网络阈值怎么设置

BP神经网络中初始权值和阈值的设定 1、首先需要了解BP神经网络是一种多层前馈网络。2、以看一下在matlab中BP神经网络的训练函数,有梯度下降法traingd,弹性梯度下降法trainrp,自适应lr梯度下降法traingda等。 3、在matlab中命令行窗口中定义输入P&…

图像处理--阈值处理

图像二值化 图像二值化就是将图像上的像素点的灰度值设置为两个值,一般为0(表示黑色)和255(表示白色),可以将整个图像呈现出明显的黑白效果。 最常用的方法就是先将图像灰度处理,然后设定一个阈…

两种划分阈值的方法

风险等级划分的时候可以降低主观性的一些系统方法 方法一:分层聚类法 凝聚层次聚类/分裂层次聚类 重点:确定层次聚类的簇数,画出树状图,基本就能得到你的区间范围,但数据量大的时候还是得再用代码跑 方法二&#xf…

“阀值”与“阈值”的区别

真相请看下图红色框里内容(手动微笑) 啥??你跟我说没看懂,好吧,说的再明白点,“阀(f)值”是一个错误的用词,其正确用法是“阈(y)值”。…

【p116】

#查询score表中为196004,课程号为1201的学生成绩 #查询student表中姓周的学生情况 #查询数学成绩第2~5名的信息 #查询通信专业最高分的学生的情况 #查询1004课程的最高分,最低分,平均成绩 #查询至少有3名学生选修且以4开头的课程号和平均分数 #将计算机专…

《JDK学习》使用JDK的keytool生成p12证书

由于前段时间在研究itext技术中的签章技术中遇到了数字签名的问题,需要用到p12证书,因此就撰写一篇用我们jdk自带的keytool 工具生成p12证书的方法供各位交流。 keytool 简介 keytool 是java 用于管理密钥和证书的工具. 其功能包括: 创建并管…

日志 P11,P12

日志: 复制一个04.内容与03是一样的. 标准日志文件: 在mybatis-config.xml中写入setting设置,配置日志文件(注意setting只能放在properties与typeAliases的中间)。 setting中参数的内容可以在mybatis官方文档查找。…

xcode ios 怎么导入p12证书

注意:在哪台电脑上生成的根证书才能在哪台电脑上导出p12,在另外的电脑上是没有导出p12的选项的(或者是灰的点不了) 1.双击p12文件,将其导入到钥匙串,或者直接把p12文件拖入到钥匙串里 2.如下图,…

iOS证书(.p12)和描述文件(.mobileprovision)申请

原文链接 : iOS证书(.p12)和描述文件(.mobileprovision)申请 如果你从事过iOS开发,大概都会了解到iOS有两种证书和描述文件: 证书类型使用场景开发(Development)证书和描述文件用于开发测试,在 HBuilderX 中打包后可在真机环境调试发布(Dist…

java工具keytool生成p12数字证书文件

最近做毕设的时候需要用到数字证书,于是就用java来生成 Keytool是用于管理和证书的工具,位于%JAVA_HOME%/bin目录** 首选找到keytool.exe 然后在上面的路径显示框中输入CMD,然后回车 进入后输入以下代码 keytool -genkeypair -alias serv…

P12:Sequential的使用

1、CIFAR10 model的结构: 2、定义网络: class Tudui(nn.Module):def __init__(self):super(Tudui, self).__init__()self.conv1 Conv2d(3, 32, 5, stride1, padding2)self.maxpool1 MaxPool2d(kernel_size2)self.conv2 Conv2d(32, 32, kernel_size5,…

仅使用p12文件和mobileprovision文件打包

前言:iOS发展到现在,必须使用开发者账号才能运行,打包;但有时候跟别人合作开发,别人不会把开发者账号密码给你,只给了一个P12证书和mobileprovision描述文件(如下图) 我们需要利用这两个文件打包。 1.双击…

P12 JWindow 窗口

P12 JWindow 窗口 1.概述2.JWindow 代码实例3.效果演示4.实现鼠标拖动 JWindow 窗口5.效果演示 系统:Win10 Java:1.8.0_333 IDEA:2020.3.4 Gitee:https://gitee.com/lijinjiang01/JavaSwing 1.概述 JWindow:一个容器&…

p12文件和provision profile文件作用

一:p12 当我们用大于三个mac设备开发应用时,想要申请新的证书,如果在我们的证书里,包含了3个发布证书,2个开发证书,可以发现再也申请不了开发证书和发布证书了 一般在我们的证书界面中应该只有一个开发证书…

职级P1到P12等级体系详解

人力资源管理中,职级是一项非常重要的概念,对于企业的薪资管理、晋升制度以及人才培养都有着至关重要的作用。而职级p1到p12则是常见的职级等级体系。 一、职级的含义 职级是指职位在企业内部的等级,通常是按照工作职责、技能要求、工作经验…

Elasticsearch:使用不同的 CA 更新安全证书 (一)

如果你必须添加组织中的新 CA 证书,或者你需要自己生成新 CA,请使用此新 CA 签署新节点证书并指示你的节点信任新 CA 证书。在今天的展示中,我将来演示如何更新一个 Elasticsearch 8.x 集群的 CA 证书。 Elasticsearch:使用不同的…

四大私募量化策略解析——阿尔法、套利、期货CTA、高频交易

近年来,随着证券市场规模的不断扩大,金融衍生产品不断推出, 投资策略和盈利模式发生根本性改变,投资复杂程度日益提高,导致证券市场投资者的构成比例出现了相应的变化。专业投资管理人的占比越来越大,且有加速之势。另一方面,量化对冲投资策略以其中低风险稳定收益的特性,将成为…