利用OpenCV的函数adaptiveThreshold()实现图像的自适应二值化阈值分割—详解函数adaptiveThreshold()

利用OpenCV的函数adaptiveThreshold()实现图像的自适应二值化阈值分割—详解函数adaptiveThreshold()图像阈值化的目的是从灰度图像中分割出目标区域和背景区域 然而仅仅通过设定固定阈值来实现图像的阈值化分割 很难达到理想的分割效果 比如我之前写的博文 https blog csdn net wenhao ir article details 就是一种固定阈值法 在实际应用中 我们可以通过图像像素邻域块的分布特征来自适应确定区域的二值化阈值 OpenCV 中提供了自适应阈值化函数 adaptiveThre 来实现自适应阈值处理

如果您有图像处理开发的需求可以联系博主,博主的联系方式见文末的名片。

图像阈值化的目的是从灰度图像中分割出目标区域和背景区域,然而仅仅通过设定固定阈值来实现图像的阈值化分割,很难达到理想的分割效果,比如我之前写的博文https://blog.csdn.net/wenhao_ir/article/details/就是一种固定阈值法。

在实际应用中,我们可以通过图像像素邻域块的分布特征来自适应确定区域的二值化阈值。

OpenCV中提供了自适应阈值化函数adaptiveThreshold来实现自适应阈值处理。

函数adaptiveThreshold()的原型如下:

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

官方文档对这个函数的说明如下:

利用OpenCV的函数adaptiveThreshold()实现图像的自适应二值化阈值分割---详解函数adaptiveThreshold()

 这里我对各参数作一个中文说明。

InputArray src:源图像

OutputArray dst:输出图像,与源图像大小一致

double maxValue:上面的截图已经很直观地说明了这个值的意义。

int adaptiveMethod:在一个邻域内计算阈值所采用的算法,有两个取值,分别为 ADAPTIVE_THRESH_MEAN_C 和 ADAPTIVE_THRESH_GAUSSIAN_C 。

ADAPTIVE_THRESH_MEAN_C的计算方法是计算出领域的平均值再减去第七个参数double C的值

ADAPTIVE_THRESH_GAUSSIAN_C的计算方法是计算出领域的高斯均值再减去第七个参数double C的值

int thresholdType:这是阈值类型,只有两个取值,分别为 THRESH_BINARY 和THRESH_BINARY_INV 。这两个参数的意义如下:

利用OpenCV的函数adaptiveThreshold()实现图像的自适应二值化阈值分割---详解函数adaptiveThreshold()

int blockSize:adaptiveThreshold的计算单位是像素的邻域块,邻域块取多大,就由这个值作决定。

double C:在对参数int adaptiveMethod的说明中,我已经说了这个参数的作用,从中可以看出,这个参数实际上是一个偏移值调整量。

从上面的说明中可以看出,使用函数adaptiveThreshold的关键是确定blockSize和C的值,明白了这两个值的意义之后,在实际项目中,我们可以根据试验法选出较为合适的值。

下面是一个实例的源码

源码中用到的图像的下载链接:

链接:https://pan.baidu.com/s/1k13r2DdhEXuXWlxV-IbxNA 提取码:kwgo

//opencv版本:OpenCV3.0 //VS版本:VS2012 //博主微信/  //有问题可以联系博主交流 //有图像处理需求也可联系博主 //图像处理技术交流  #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" int main( ) { // 图像读取及判断 cv::Mat srcImage = cv::imread("F:/material/images/P0027-coins-01.png"); if( !srcImage.data ) return 1; // 灰度转换 cv::Mat srcGray; cv::cvtColor(srcImage, srcGray, CV_RGB2GRAY); cv::imshow("srcGray", srcGray); cv::Mat dstImage; // 初始化自适应阈值参数 int blockSize = 5; int constValue = 10; const int maxVal = 255; /* 自适应阈值算法 0:ADAPTIVE_THRESH_MEAN_C 1: ADAPTIVE_THRESH_GAUSSIAN_C 阈值类型 0: THRESH_BINARY 1: THRESH_BINARY_INV */ int adaptiveMethod = 0; int thresholdType = 1; // 图像自适应阈值操作 cv::adaptiveThreshold(srcGray, dstImage, maxVal, adaptiveMethod, thresholdType, blockSize, constValue); cv::imshow("dstImage", dstImage); cv::waitKey(0); return 0; }

运行结果如下图所示:

利用OpenCV的函数adaptiveThreshold()实现图像的自适应二值化阈值分割---详解函数adaptiveThreshold()

需要Python代码的可参见博文  https://blog.csdn.net/wenhao_ir/article/details/125592598 的第05点。

​延伸阅读:与二值化阈值处理相关的OpenCV函数、方法汇总,便于对比和拿来使用

如果您有图像处理开发的需求可以联系博主,博主的联系方式见下面的名片。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/214887.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午3:12
下一篇 2026年3月18日 下午3:13


相关推荐

  • lspci命令详解无网卡信息_linux系统安装图形化界面

    lspci命令详解无网卡信息_linux系统安装图形化界面说明:lspci 是一个用来显示系统中所有PCI总线设备或连接到该总线上的所有设备的工具。参数:-v使得lspci以冗余模式显示所有设备的详细信息。-vv使得lspci以过冗余模式显示更详细的信息(事实上是PCI设备能给出的所有东西)。这些数据的确切意义没有在此手册页中解释,如果你想知道更多,请参照/usr/include/linux/pci.h或者P

    2025年10月16日
    6
  • Linux 简单命令操作 笔记

    Linux 简单命令操作 笔记

    2021年9月3日
    68
  • 读TIJ -2 一切都是对象[通俗易懂]

    读TIJ -2 一切都是对象

    2022年1月25日
    38
  • 激活成功教程网络尖兵

    激活成功教程网络尖兵ADSL 给大家上网带来的极大地方便 许多家庭都有好几台计算机 通过 ADSL 共享上网的方式可以各自上网 互不干扰 可最近很多朋友告诉我 如果只有一台机子访问互联网 一切正常 若两台机子都要访问互联网 则都打不开网页 打听来的消息说 电信新装网络硬件 网络尖兵 上网查了一下关于网络尖兵的资料 只提到了实现的功能 没有提到实现原理 要想解决不能共享上网必须摸清它的工作原理 ADSL 共享上网有两种方式

    2026年3月26日
    2
  • 递归简单举例_递归定义举例

    递归简单举例_递归定义举例刚接触递归的同学,可能难以理解递归,难以理解的点可能很多,例如:1.函数为什么可以在自己的内部又调用自己呢?2.既然可以自己调用自己,那么递归运行过程中一定回有很多层相互嵌套,到底什么时候不再嵌套呢?3.递归运行过程中,相互嵌套的多层之间会有参数传递,多层之间是否会相互影响?递归两个要素1.递归边界2.递归的逻辑——递归”公式”递归的过程一定有参数的变化,并且参

    2025年7月8日
    7
  • eclipse安装和配置环境教程(vue环境配置)

    官方下载地址:https://www.eclipse.org/downloads/电脑是64位的可以直接点下载64位,不是64位的电脑点下载包,在里面选择不同的版本下载点击下载后,浏览器会下载一个exe的安装包,但是下载完成后点击安装包会提示下载JDK;下载jdk官方网址:http://www.oracle.com/technetwork/java/javase/download…

    2022年4月10日
    423

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号