文章目录

  • 一. 全局阈值分割
  • 二. Otsu阈值分割(大律法)
    • ① 大律法阈值分割的原理
  • 三. 自适应阈值(局部阈值)
    • ① 自适应阈值分割的原理
    • ② 自适应阈值分割的函数原型
    • ③ 自适应阈值分割代码示例

一. 全局阈值分割

全局阈值分割指的是使用一个固定的阈值,大于这个阈值的设定为一个颜色,小于或者等于这个阈值的像素设定为另外一种颜色.

函数原型:

double threshold( InputArray src, OutputArray dst,double thresh, double maxval, int type );
  • src: 要处理的图像,一般是灰度图像
  • dst: 输出图像
  • thres: 设定的阈值
  • maxval: 灰度的最大值,一般为255,用来指明阈值分割中最大值的取值,主要指阈值二值化和反二值化中
  • type: 阈值分割的方式

``

阈值分割案例

#include "MyOpencv.h"int main(void)
{Mat original = cv::imread("test_02.bmp", IMREAD_GRAYSCALE);imshow("Original", original);Mat dst;// 阈值二值化cv::threshold(original, dst, 127, 255, cv::THRESH_BINARY);imshow("ThresBinary", dst);// 阈值反二值化cv::threshold(original, dst, 127, 255, cv::THRESH_BINARY_INV);imshow("ThresBinaryInv", dst);// 阈值截断cv::threshold(original, dst, 127, 255, cv::THRESH_TRUNC);imshow("ThresTrunc", dst);// 阈值取零cv::threshold(original, dst, 127, 255, cv::THRESH_TOZERO);imshow("ThresToZero", dst);// 阈值反取零cv::threshold(original, dst, 127, 255, cv::THRESH_TOZERO_INV);imshow("ThresToZeroInv", dst);waitKey(0);
}

二. Otsu阈值分割(大律法)

① 大律法阈值分割的原理

对于图像I(x,y),前景(即目标)和背景的分割阈值记为T,属于前景的像素点数占整幅图像的比例记为w0,其平均灰度u0;背景像素点数占整幅图像的比例记为w1,其平均灰度记为u1.图像的总平均灰度记为u,类间方差记为g.假设图像的大小为M*N,图像中像素的灰度值小于阈值T的像素个数记为N0,像素灰度大于阈值T的像素个数记为N1,则有:


使用方式:
阈值分割的时候加上type里面加上标志: THRES_OTSU即可,最终进行阈值分割的阈值会返回

double T = cv::threshold(original, dst, 0, 255, cv::THRESH_OTSU);cout << "大律法进行阈值分割的阈值: " << T << endl;imshow("OtsuThresBinary", dst);

结果:

三. 自适应阈值(局部阈值)

① 自适应阈值分割的原理

在自适应阈值处理中,平滑算子的尺寸决定了分割出来的物体的尺寸,如果滤波器尺寸太小,那么估计出的局部阈值将不理想.凭经验,平滑算子的宽度必须大于被识别物理题的宽度,窗口的尺寸越大,平滑后结果越能更好地作为每个像素的阈值参考,也不能无限大.
假设输入的图像为I,宽度为W,高度为H,自适应阈值分割的步骤如下:

  1. 对图像进行平滑处理,平滑结果为f(I),其中平滑可以是均值平滑,高斯平滑
  2. 自适应阈值矩阵 Thresh = (1-ratio) * f(I), 一般令 ratio = 0.15
  3. 利用局部阈值分割规则

② 自适应阈值分割的函数原型

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

算法思想: 局部二值化

  • step1: 对某个像素值,原来的S,取其周围N*N的区域,求区域均值或者高斯加权值,记为T.
  • step2: 对图像,如果S>T,则该像素二值化为255,否则为0
    可以出入参数C,C可以是任何数,当S>T-C,则把原像素二值化为255.

参数C的作用,其实就是改变计算后的阈值,比如计算后的阈值是12,如果加上一个C,其阈值就变成了12+C

③ 自适应阈值分割代码示例

#include "MyOpencv.h"int main(void)
{Mat original = cv::imread("test_03.bmp", cv::IMREAD_GRAYSCALE);imshow("Original", original);// 使用大律法进行阈值分割Mat dst;cv::threshold(original, dst, 0, 255, cv::THRESH_OTSU);imshow("Otsu", dst);// 使用固定阈值分割cv::threshold(original, dst, 127, 255, cv::THRESH_BINARY);imshow("ThresBinary", dst);// 使用自适应阈平均阈值值分割,并且C为0adaptiveThreshold(original, dst, 255, cv::ADAPTIVE_THRESH_MEAN_C,cv::THRESH_BINARY, 19, 0);imshow("Mean_C(0)", dst);// 使用自适应阈值高斯均值,并且C为10adaptiveThreshold(original, dst, 255, cv::ADAPTIVE_THRESH_GAUSSIAN_C, cv::THRESH_BINARY, 5, 2);imshow("Gaussian_Mean_C(10)", dst);waitKey(0);return 0;
}

Opencv_11 阈值分割相关推荐

  1. 数字图像处理:blob分析、阈值分割

    1.Blob分析: 1.1.blob分析概念在计算机视觉中的Blob(Binary large object)是指图像中的具有相似颜色.纹理等特征所组成的一块连通区域,一般来说,该区域就是图像中的前景 ...

  2. opencv阈值分割类型

    threshold(InputArray src, OutputArray dst, double thresh, double maxval, int type); src:输入图,只能输入单通道图 ...

  3. otsu阈值分割算法_图像分割之大津算法(OTSU)

    关注公众号,获取更多信息 引言 最近一直在看图像二值化相关的东西,一直想寻找一个好的方法,能够自适应的设定阈值.这个过程中,发现了OTSU算法,其实这也算是基本的图像处理算法,之前有过接触,但是放过了 ...

  4. opencv 阈值分割 — threshold()

    OpenCV阈值分割函数:threshold() 函数原型: double threshold(InputArray src, OutputArray dst, double thresh, doub ...

  5. 利用最大熵进行阈值分割从而实现灰度图像的二值化的原理概要及OpenCV代码

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 详细的数学原理目前我也没搞明白,所以只说下原理概 ...

  6. otsu自适应阈值分割的算法描述和opencv实现,及其在肤色检测中的应用

    from:http://blog.csdn.net/onezeros/article/details/6136770 otsu算法选择使类间方差最大的灰度值为阈值,具有很好的效果 算法具体描述见ots ...

  7. opencv 图像阈值分割图像

    最简单的图像分割的方法. 应用举例:从一副图像中利用阈值分割出我们需要的物体部分(当然这里的物体可以是一部分或者整体).这样的图像分割方法是基于图像中物体与背景之间的灰度差异,而且此分割属于像素级的分 ...

  8. c++ opencv编程实现暗通道图像去雾算法_OpenCV图像处理专栏十五 |一种基于亮度均衡的图像阈值分割技术...

    前言 对于光照不均匀的图像,用通常的图像分割方法不能取得满意的效果.为了解决这个问题,论文<一种基于亮度均衡的图像阈值分割技术>提出了一种实用而简便的图像分割方法.该方法针对图像中不同亮度 ...

  9. opencv 图像分割 阈值分割 图像二值化 灰度图

    # -*- coding: utf-8 -*- """ @File : 191213_测试_阈值分割.py @Time : 2019/12/13 15:14 @Autho ...

最新文章

  1. 图像边缘检测--OpenCV之cvCanny函数
  2. 自定义 Layer 属性的动画
  3. linux内核技术文章
  4. MongoDB 之 手把手教你增删改查 MongoDB - 2
  5. GDCM:gdcm::Validate的测试程序
  6. C++ Opengl纹理贴图源码
  7. Android UI 色板
  8. vue 如何点击按钮返回上一页
  9. 利用域名(host碰撞)碰撞实现从任何地方发起中间人攻击(理论篇)
  10. python 路径格式化_Python Black 一键格式化美化代码
  11. MATLAB1阶零模型,MATLAB 空间计量模型的实现
  12. Python 双y轴绘制
  13. python语音转文字源码_python文字转语音实现过程解析
  14. Idea如何设置页面内容模板
  15. MatLab2019下载
  16. 订阅号与服务号的区别
  17. 036.crud准备
  18. L1-039 古风排版 (20 分)(二维数组)
  19. MISC:压缩包取证(zip爆破、明文攻击、伪加密、CRC32碰撞)
  20. SVN提交报错: txn-current-lock拒绝访问。

热门文章

  1. nginx代理应用sso跳转处理
  2. lyapunov指数求取时运用qr法与jacobi法之间的区别与联系【基于matlab的动力学模型学习笔记_10】
  3. LaTeX中使用bicaption、tabula包绘制三线表
  4. 《Adobe Acrobat DC经典教程》—第1章1.7节使用工具栏
  5. Windows 10 安装 CUDA 失败之屡败屡战
  6. Open3D 区域生长分割:详解Python实现过程
  7. Shader的诞生 十大贴图常用贴图介绍
  8. bat自动备份Oracle数据库
  9. 计算机网络接口 rj45类型,RJ45计算机网络接口信号防雷器
  10. python汇率编程_python – 确定汇率的算法