阈值化

在对图像进行处理操作的过程中,我们常常需要对图像中的像素做出取舍与决策,直接剔除一些低于或高于一定值的像素。

阈值分割可以视为最简单的图像分割方法。比如基于图像中物体与背景之间的灰度差异,可以利用阈值分割出我们需要的物体。这种分割是像素级的分割,为了从一幅图像中提取我们需要的部分,应该用图像中的每个像素点的灰度值与选择的阈值进行比较,并作出取舍判断。

注意,阈值的选取依赖于具体问题,物体在不同的图片中可能会有不同的灰度值。一旦找到了需要分割的物体的像素点,可以对这些像素点设定一些特定的值来表示。例如可以将物体的像素点的灰度值设定为”0“(黑色),其他像素点的灰度值设为”255“(白色)。

OpenCV 中 threshold() 函数(固定阈值操作)和 adaptiveThreshold() 函数(自适应阈值操作)可以满足这样的需求。它们的基本思想是:给定一个数组和一个阈值,根据数组中的每个元素的值是高于还是低于阈值而进行一些操作。

固定阈值操作:threshold 函数

threshold() 函数是对单通道数组应用固定阈值操作。该函数的典型应用是对灰度图像进行阈值操作得到二值图像(compare 函数也可以达到此目的),或者去除噪声,过滤掉像素值很小或很大的图像点。

double threshold(InputArray src, OutputArray dst, double thresh, double maxval, int type);

  • src,输入数组,填单通道、8 或 32 位浮点类型的 Mat 类型对象即可。
  • dst,输出数组,和第一个参数中的 Mat 变量有一样的尺寸和类型。
  • thresh,阈值的具体值。
  • maxval,输出像素值的上限,仅当第五个参数阈值类型 type 取 THRESH_BINARY 或 THRESH_BINARY_INV 时会用到。
  • type,阈值类型。

折线为将被阈值化的值,虚线为阈值

THRESH_BINARY:大于阈值的部分被置为 maxval,小于部分被置为 0

THRESH_BINARY_INV:大于阈值部分被置为 0,小于部分被置为 maxval

THRESH_TRUNC:大于阈值部分被置为 thresh,小于部分保持原样

THRESH_TOZERO:小于阈值部分被置为 0,大于部分保持不变

THRESH_TOZERO_INV:大于阈值部分被置为 0,小于部分保持不变

THRESH_BINARY|THRESH_OTSU:使用最大类间差分法(THRESH_OTSU)获取阈值,然后再用该阈值进行二分,二分方法是上面 5 种选择。
THRESH_BINARY|THRESH_TRIANGLE:使用三角法获取阈值,然后再用该阈值进行二分,二分方法是上面 5 种选择。

  • 返回值为 thresh

自适应阈值操作:adaptiveThreshold 函数

前面看到简单阈值是一种全局性的阈值,只需要规定一个阈值的值,整个图像都和这个阈值比较。而自适应阈值可以看成一种局部性的阈值,通过规定一个区域大小,比较这个点与区域大小里面像素点的平均值(或者其他特征)的大小关系确定这个像素点是属于黑或者白(如果是二值情况)。

double adaptiveThreshold (InputArray src, OutputArray dst, double maxVal, int adaptiveMethod, int thresholdType, int blockSize, double C);

  • src,输入数组,Mat 类的对象即可,但需要为 8 位单通道浮点型图像。
  • dst,输出数组,和第一个参数中的 Mat 变量有一样的尺寸和类型。
  • maxVal,输出像素值的上限。
  • adaptiveMethod,用于指定要使用的自适应阈值算法。阈值有两种取值:

ADAPTIVE_THRESH_MEAN_C :领域内均值

ADAPTIVE_THRESH_GAUSSIAN_C :领域内像素点加权和,权重为一个高斯窗口。

  • thresholdType,阈值类型。取值必须为 THRESH_BINARY 或 THRESH_BINARY_INV。
  • blockSize,用于计算阈值大小的一个像素的邻域尺寸,取值为 3、5、7。
  • C,阈值 = 平均或加权平均值 - C。为0相当于阈值 就是求得领域内均值或者加权值。

代码示例:

#include <opencv.hpp>
using namespace cv;
int main() {
Mat src = imread("C:/Users/齐明洋/Desktop/证件照/7.jpg", );
imshow("src", src); Mat dst;
threshold(src, dst, , , THRESH_BINARY);
imshow("binary img", dst); adaptiveThreshold(src, dst, , ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY, , );
imshow("adaptive binary img", dst); waitKey();
}

效果展示:

借鉴博客:https://blog.csdn.net/qq_37385726/article/details/82015545

https://www.cnblogs.com/yinliang-liang/p/9293310.html

------------恢复内容开始------------

阈值化

在对图像进行处理操作的过程中,我们常常需要对图像中的像素做出取舍与决策,直接剔除一些低于或高于一定值的像素。

阈值分割可以视为最简单的图像分割方法。比如基于图像中物体与背景之间的灰度差异,可以利用阈值分割出我们需要的物体。这种分割是像素级的分割,为了从一幅图像中提取我们需要的部分,应该用图像中的每个像素点的灰度值与选择的阈值进行比较,并作出取舍判断。

注意,阈值的选取依赖于具体问题,物体在不同的图片中可能会有不同的灰度值。一旦找到了需要分割的物体的像素点,可以对这些像素点设定一些特定的值来表示。例如可以将物体的像素点的灰度值设定为”0“(黑色),其他像素点的灰度值设为”255“(白色)。

OpenCV 中 threshold() 函数(固定阈值操作)和 adaptiveThreshold() 函数(自适应阈值操作)可以满足这样的需求。它们的基本思想是:给定一个数组和一个阈值,根据数组中的每个元素的值是高于还是低于阈值而进行一些操作。

固定阈值操作:threshold 函数

threshold() 函数是对单通道数组应用固定阈值操作。该函数的典型应用是对灰度图像进行阈值操作得到二值图像(compare 函数也可以达到此目的),或者去除噪声,过滤掉像素值很小或很大的图像点。

double threshold(InputArray src, OutputArray dst, double thresh, double maxval, int type);

  • src,输入数组,填单通道、8 或 32 位浮点类型的 Mat 类型对象即可。
  • dst,输出数组,和第一个参数中的 Mat 变量有一样的尺寸和类型。
  • thresh,阈值的具体值。
  • maxval,输出像素值的上限,仅当第五个参数阈值类型 type 取 THRESH_BINARY 或 THRESH_BINARY_INV 时会用到。
  • type,阈值类型。

折线为将被阈值化的值,虚线为阈值

THRESH_BINARY:大于阈值的部分被置为 maxval,小于部分被置为 0

THRESH_BINARY_INV:大于阈值部分被置为 0,小于部分被置为 maxval

THRESH_TRUNC:大于阈值部分被置为 thresh,小于部分保持原样

THRESH_TOZERO:小于阈值部分被置为 0,大于部分保持不变

THRESH_TOZERO_INV:大于阈值部分被置为 0,小于部分保持不变

THRESH_BINARY | THRESH_OTSU:使用最大类间差分法(THRESH_OTSU)获取阈值,然后再用该阈值进行二分,二分方法是 | 左边方法。

THRESH_BINARY_INV | THRESH_TRIANGLE:使用三角法获取阈值,然后再用该阈值进行二分,二分方法是 | 左边方法。

自适应阈值操作:adaptiveThreshold 函数

前面看到简单阈值是一种全局性的阈值,只需要规定一个阈值的值,整个图像都和这个阈值比较。而自适应阈值可以看成一种局部性的阈值,通过规定一个区域大小,比较这个点与区域大小里面像素点的平均值(或者其他特征)的大小关系确定这个像素点是属于黑或者白(如果是二值情况)。

double adaptiveThreshold (InputArray src, OutputArray dst, double maxVal, int adaptiveMethod, int thresholdType, int blockSize, double C);

  • src,输入数组,Mat 类的对象即可,但需要为 8 位单通道浮点型图像。
  • dst,输出数组,和第一个参数中的 Mat 变量有一样的尺寸和类型。
  • maxVal,输出像素值的上限。
  • adaptiveMethod,用于指定要使用的自适应阈值算法。阈值有两种取值:

ADAPTIVE_THRESH_MEAN_C :领域内均值

ADAPTIVE_THRESH_GAUSSIAN_C :领域内像素点加权和,权重为一个高斯窗口。

  • thresholdType,阈值类型。取值必须为 THRESH_BINARY 或 THRESH_BINARY_INV。
  • blockSize,用于计算阈值大小的一个像素的邻域尺寸,取值为 3、5、7。
  • C,阈值 = 平均或加权平均值 - C。为0相当于阈值 就是求得领域内均值或者加权值。

代码示例:

#include <opencv.hpp>
using namespace cv;
int main() {
Mat src = imread("C:/Users/齐明洋/Desktop/证件照/7.jpg", );
imshow("src", src); Mat dst;
threshold(src, dst, , , THRESH_BINARY);
imshow("binary img", dst); adaptiveThreshold(src, dst, , ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY, , );
imshow("adaptive binary img", dst); waitKey();
}

效果展示:

借鉴博客:https://blog.csdn.net/qq_37385726/article/details/82015545

https://www.cnblogs.com/yinliang-liang/p/9293310.html

------------恢复内容开始------------

阈值化

在对图像进行处理操作的过程中,我们常常需要对图像中的像素做出取舍与决策,直接剔除一些低于或高于一定值的像素。

阈值分割可以视为最简单的图像分割方法。比如基于图像中物体与背景之间的灰度差异,可以利用阈值分割出我们需要的物体。这种分割是像素级的分割,为了从一幅图像中提取我们需要的部分,应该用图像中的每个像素点的灰度值与选择的阈值进行比较,并作出取舍判断。

注意,阈值的选取依赖于具体问题,物体在不同的图片中可能会有不同的灰度值。一旦找到了需要分割的物体的像素点,可以对这些像素点设定一些特定的值来表示。例如可以将物体的像素点的灰度值设定为”0“(黑色),其他像素点的灰度值设为”255“(白色)。

OpenCV 中 threshold() 函数(固定阈值操作)和 adaptiveThreshold() 函数(自适应阈值操作)可以满足这样的需求。它们的基本思想是:给定一个数组和一个阈值,根据数组中的每个元素的值是高于还是低于阈值而进行一些操作。

固定阈值操作:threshold 函数

threshold() 函数是对单通道数组应用固定阈值操作。该函数的典型应用是对灰度图像进行阈值操作得到二值图像(compare 函数也可以达到此目的),或者去除噪声,过滤掉像素值很小或很大的图像点。

double threshold(InputArray src, OutputArray dst, double thresh, double maxval, int type);

  • src,输入数组,填单通道、8 或 32 位浮点类型的 Mat 类型对象即可。
  • dst,输出数组,和第一个参数中的 Mat 变量有一样的尺寸和类型。
  • thresh,阈值的具体值。
  • maxval,输出像素值的上限,仅当第五个参数阈值类型 type 取 THRESH_BINARY 或 THRESH_BINARY_INV 时会用到。
  • type,阈值类型。

折线为将被阈值化的值,虚线为阈值

THRESH_BINARY:大于阈值的部分被置为 maxval,小于部分被置为 0

THRESH_BINARY_INV:大于阈值部分被置为 0,小于部分被置为 maxval

THRESH_TRUNC:大于阈值部分被置为 thresh,小于部分保持原样

THRESH_TOZERO:小于阈值部分被置为 0,大于部分保持不变

THRESH_TOZERO_INV:大于阈值部分被置为 0,小于部分保持不变

THRESH_BINARY | THRESH_OTSU:使用最大类间差分法(THRESH_OTSU)获取阈值,然后再用该阈值进行二分,二分方法是 | 左边方法。

THRESH_BINARY_INV | THRESH_TRIANGLE:使用三角法获取阈值,然后再用该阈值进行二分,二分方法是 | 左边方法。

自适应阈值操作:adaptiveThreshold 函数

前面看到简单阈值是一种全局性的阈值,只需要规定一个阈值的值,整个图像都和这个阈值比较。而自适应阈值可以看成一种局部性的阈值,通过规定一个区域大小,比较这个点与区域大小里面像素点的平均值(或者其他特征)的大小关系确定这个像素点是属于黑或者白(如果是二值情况)。

double adaptiveThreshold (InputArray src, OutputArray dst, double maxVal, int adaptiveMethod, int thresholdType, int blockSize, double C);

  • src,输入数组,Mat 类的对象即可,但需要为 8 位单通道浮点型图像。
  • dst,输出数组,和第一个参数中的 Mat 变量有一样的尺寸和类型。
  • maxVal,输出像素值的上限。
  • adaptiveMethod,用于指定要使用的自适应阈值算法。阈值有两种取值:

ADAPTIVE_THRESH_MEAN_C :领域内均值

ADAPTIVE_THRESH_GAUSSIAN_C :领域内像素点加权和,权重为一个高斯窗口。

  • thresholdType,阈值类型。取值必须为 THRESH_BINARY 或 THRESH_BINARY_INV。
  • blockSize,用于计算阈值大小的一个像素的邻域尺寸,取值为 3、5、7。
  • C,阈值 = 平均或加权平均值 - C。为0相当于阈值 就是求得领域内均值或者加权值。

代码示例:

#include <opencv.hpp>
using namespace cv;
int main() {
Mat src = imread("C:/Users/齐明洋/Desktop/证件照/7.jpg", );
imshow("src", src); Mat dst;
threshold(src, dst, , , THRESH_BINARY);
imshow("binary img", dst); adaptiveThreshold(src, dst, , ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY, , );
imshow("adaptive binary img", dst); waitKey();
}

效果展示:

借鉴博客:https://blog.csdn.net/qq_37385726/article/details/82015545

https://www.cnblogs.com/yinliang-liang/p/9293310.html

------------恢复内容结束------------

------------恢复内容结束------------

opencv —— threshold、adaptiveThreshold 固定阈值 & 自适应阈值 进行图像二值化处理的更多相关文章

  1. OpenCV_基于局部自适应阈值的图像二值化

    在图像处理应用中二值化操作是一个很常用的处理方式,例如零器件图片的处理.文本图片和验证码图片中字符的提取.车牌识别中的字符分割,以及视频图像中的运动目标检测中的前景分割,等等. 较为常用的图像二值化方 ...

  2. [python-opencv]图像二值化【图像阈值】

    图像二值化[图像阈值]简介: 如果灰度图像的像素值大于阈值,则为其分配一个值(可以是白色255),否则为其分配另一个值(可以是黑色0) 图像二值化就是将灰度图像上的像素值设置为0或255,也就是将整个 ...

  3. Python+OpenCV图像处理(十)—— 图像二值化

    简介:图像二值化就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果的过程. 一.普通图像二值化 代码如下: import cv2 as cv import numpy ...

  4. python-opencv 图像二值化,自适应阈值处理

    定义:图像的二值化,就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的只有黑和白的视觉效果. 一幅图像包括目标物体.背景还有噪声,要想从多值的数字图像中直接提取出目标物体,常用 ...

  5. opencv python 图像二值化/简单阈值化/大津阈值法

    pip install matplotlib 1简单的阈值化 cv2.threshold第一个参数是源图像,它应该是灰度图像. 第二个参数是用于对像素值进行分类的阈值, 第三个参数是maxVal,它表 ...

  6. opencv图像二值化的函数cvThreshold()。 cvAdaptiveThreshol

    OpenCV中对图像进行二值化的关键函数——cvThreshold(). 函数功能:采用Canny方法对图像进行边缘检测 函数原型: void cvThreshold( const CvArr* sr ...

  7. 10、OpenCV Python 图像二值化

    __author__ = "WSX" import cv2 as cv import numpy as np #-----------二值化(黑0和白 255)---------- ...

  8. opencv python:图像二值化

    import cv2 as cv import numpy as np import matplotlib.pyplot as plt # 二值图像就是将灰度图转化成黑白图,没有灰,在一个值之前为黑, ...

  9. opencv-python图像二值化函数cv2.threshold函数详解及参数cv2.THRESH_OTSU使用

    cv2.threshold()函数的作用是将一幅灰度图二值化,基本用法如下: #ret:暂时就认为是设定的thresh阈值,mask:二值化的图像 ret,mask = cv2.threshold(i ...

随机推荐

  1. JVM第一弹

    JVM第一弹 基本概念 JVM是可运行java代码的假想计算机,包括一套字节码指令集,一组寄存器,一个栈,一个垃圾回收.堆和一个存储方法域.JVM是运行在操作系统之上的,它与硬件没有直接的交互. 运行 ...

  2. vue-cli3中引入图片的几种方式和注意事项

    如果你是在数据中引入图片,他是从项目中引入的应该按第一种方式引入 如果不是在数据中引入图片,按第二种方式引入

  3. centos7.6+python3+apache2.4+django2.1.2网站部署总结

    本次网站部署是使用了django2.1.2版本部署,由于centos自带的Python2.7不支持django2.0以上版本,故需要安全python3的环境.python3.apache的安装不做具体 ...

  4. Android小记(整理一下自己犯过的错误)

    时间:2019/12/20 如题,写这篇博客的原因主要是为了记录自己在Android编程中犯的一些低级的错误,以此警戒自己不要出现类似的错误. 1.在监听按钮的点击事件时,如果使用的是实现View.O ...

  5. 详解隐马尔可夫模型(HMM)中的维特比算法

    笔记转载于GitHub项目:https://github.com/NLP-LOVE/Introduction-NLP 4. 隐马尔可夫模型与序列标注 第3章的n元语法模型从词语接续的流畅度出发,为全切 ...

  6. pico g2 触摸板手柄射线检测---for unity

    1.pico g2手柄射线检测UI,需要在canvas添加Graphic Raycaster脚本和Pvr_Ui Canvas脚本. 2.删除掉原有的maincamera,将Pvr_unitySDK下h ...

  7. 微信小程序框架分析小练手(一)——猫眼电影底部标签导航制作

    旧版猫眼电影底部有4个标签导航:电影.影院.发现.我的,如下图所示: 一.首先,打开微信开发者工具,新建一个项目:movie.如下图: 二.建立如下的一些目录: 三.将底部标签导航图标的素材放到ima ...

  8. wordpress 如何正确升级

    http://www.admin5.com/article/20141230/578710.shtml 正确的版本升级应该是,备份数据库和文件,然后禁用所有的插件后在执行升级.这样也避免不了升级过后启 ...

  9. 脚本、脚本语言、shell脚本

    脚本是批处理文件的延伸,是一种纯文本保存的程序,一般来说的计算机脚本程序是确定的一系列控制计算机进行运算操作动作的组合,在其中可以实现一定的逻辑分支等.脚本程序相对一般程序开发来说比较接近自然语言,可 ...

  10. lua学习之基础概念篇

    基础概念 程序块 (chunk) 定义 lua 中的每一个源代码文件或在交互模式(Cmd)中输入的一行代码都称之为程序块 一个程序块就是一连串语句或者命令 lua 中连续的语句不需要分隔符,但为了可读 ...