OpenCV图像处理——自适应阈值处理函数 adaptiveThreshold

目录

[1. Otsu算法](#1. Otsu算法)

[2. 自适应阈值函数 adaptiveThreshold](#2. 自适应阈值函数 adaptiveThreshold)

[3. 示例](#3. 示例)


1. Otsu 算法

让 cv::threshold() 尝试确定阈值处理的最优值是可能的。只需传递参数 cv::THRESH_OTSU 作为 thresh 值即可。

简言之,Otsu 算法考虑所有可能的阈值,并计算两类像素(即,低于阈值的像素类和高于阈值的像素类)的每一类的方差 。Otsu 算法算小化下列值:

其中, 和 由每一类像素中像素数量给出的两类相对权重,而 和 是每一类中的方差。它已证明,按这种方式最小化这两类方差与最小化这两类之间的方差相同。由于要求穷尽搜索可能阈值空间,因此,这种方法不是特别快。

2. 自适应阈值函数adaptiveThreshold

在该方法中,算法会针对图像的局部小区域分别计算阈值。因此,同一幅图像的不同区域将获得各自独立的阈值,从而针对光照变化不均的图像产生更佳的处理效果。

cv::adaptiveThreshold (src, dst, maxValue, adaptiveMethod, thresholdType, blockSize, C)

参数:

(1) src------源 8 位单通道图像。

(2) dst------与 src 大小及类型均相同的目标图像。

(3) maxValue------为满足条件的像素赋予非零值。

(4) adaptiveMethod------待使用的自适应阈值算法,它决定了如何计算阈值:

cv::ADAPTIVE_THRESH_MEAN_C

cv::ADAPTIVE_THRESH_GAUSSIAN_C

(5) thresholdType ------阈值类型,必须为 cv::THRESH_BINARY 或 cv::THRESH_BINARY_INV。

(6) blockSize ------用于计算像素阈值的像素邻域大小:3、5、7 等 。

(7) C------从均值或加权均值中减去的常数(详见下文)。通常为正值,但也可能为零或负值。

3. 示例

void Test_adaptiveThreshold()

{

string filename = "D:\\TestVideo\\Flower6-2.jpg";

Mat src, src_gray, dst;

src = imread(samples::findFile(filename), IMREAD_COLOR); // Load an image

cvtColor(src, src_gray, COLOR_BGR2GRAY); // 转换为灰度图像

cv::adaptiveThreshold(

src_gray,

dst,

255,

cv::ADAPTIVE_THRESH_GAUSSIAN_C,

cv::THRESH_BINARY,

3,

2

);

// Show the results.

//

cv::imshow("Adaptive Threshold", dst);

cv::waitKey(0);

}

运行结果:

原图:

自适应阈值处理后的图像:

相关推荐
limuyang214 小时前
我在 2核2G 云主机上跑 OpenViking:一次关于云主机、模型选型与长期成本的真实复盘
人工智能·开源·ai编程
Shulex16 小时前
跨境电商 AI Agent 核心架构解析:从只读问答到自主执行的工程落地
人工智能·架构·智能客服·跨境电商
Java后端的Ai之路16 小时前
CAS并发控制-从CPU指令到企业级乐观锁
vue.js·人工智能·python·cas·乐观锁
情 九16 小时前
MCP 实战 06:把 HTTP 接口接成工具,让 AI 帮你查数据
人工智能·网络协议·http·mcp
码农小旋风16 小时前
Ray分布式计算引擎介绍
人工智能·架构
火山引擎和TA的超级拍档们17 小时前
产品情报局 08 | AI 内容助手:全网热点驱动,一站式打通内容生产全链路
人工智能
Binovate缤江数智17 小时前
水泵远程开关之后,还需要管什么?数智开关在无人值守泵站中的监测、保护与能耗分析
人工智能·物联网
素男17 小时前
两个月不是六十天
人工智能·agent·self-becoming·ai长期记忆·ai自我介绍
byte轻骑兵17 小时前
【LMP】规范精讲[10]: 语音专线开线记——SCO 固定占座与 eSCO 限时重传
人工智能·人机交互·lmp·蓝牙链路管理·蓝牙外设