imread函数_【图像处理】OpenCV系列二十 --- 二值化函数详解(threshold)

上一节我们学习了用自适应阈值对一幅图像进行二值化,相信大家学习之后,已经有所了解,本节我们针对二值化这个概念我们进入深入的剖析,本节我们将学习二值化函数(threshold)的具体原理与用法!

1、函数原型

double threshold(InputArray src,

OutputArray dst,

double thresh,

double maxval,

int type);

2、函数功能

对数组元素进行固定阈值操作;并且该函数可以对多通道的数组用固定的阈值进行二值化;通常用于将灰度图像转换为二值化的图像;用于消除噪声,即滤除值过小或过大的像素;函数支持几种类型的阈值处理,由函数中的type参数决定;

另外,THRESH_OTSU or THRESH_TRIANGLE可以与type进行组合对图像进行二值化处理;在这些情况下,函数使用Otsu或者Triangle算法确定最优阈值,并使用它代替指定的阈值;

Note:

目前,Otsu或者Triangle算法仅支持8位单通道图像的实现,该函数支持就地操作哦!

返回值:

如果Otsu或者Triangle算法,则计算阈值。

3、参数详解

  • 第一个参数,InputArray src,输入图像,可以是多通道图像、8位图像、32位浮点型图像;
  • 第二个参数,OutputArray dst,目标图像,和原图像有一样的尺寸、类型和同样的通道数;
  • 第三个参数,double thresh,进行二值化的阈值;
  • 第四个参数,double maxval,最大值,一般与THRESH_BINARY或者THRESH_BINARY_INV阈值类型一起使用;
  • 第五个参数,int type,阈值的类型;

4、阈值类型详解

670343c41f22f49b9c954c226c5ae46f.png

阈值详解

(1)THRESH_BINARY,正向二值化,如果当前的像素值大于设置的阈值(thresh),则将该点的像素值设置为maxval;否则,将该点的像素值设置为0;

具体的公式如下

24e8090ab883424bb2c13146cf987768.png

THRESH_BINARY

(2)THRESH_BINARY_INV ,反向二值化,如果当前的像素值大于设置的阈值(thresh),则将该点的像素值设置为0;否则,将该点的像素值设置为maxval;

具体的公式如下

800c20c0cdc4ec69a8559bb2dd67f546.png

THRESH_BINARY_INV

(3)THRESH_TRUNC ,如果当前的像素值大于设置的阈值(thresh),则将该点的像素值设置为threshold;否则,将该点的像素值不变;

具体的公式如下

fef52a20af05229892ab51a10ed07438.png

THRESH_TRUNC

(4)THRESH_TOZERO ,如果当前的像素值大于设置的阈值(thresh),则将该点的像素值不变;否则,将该点的像素值设置为0;

具体的公式如下

1d241ab7b3623300bb0be3a026777ed3.png

THRESH_TOZERO

(5)THRESH_TOZERO_INV ,如果当前的像素值大于设置的阈值(thresh),则将该点的像素值设置为0;否则,将该点的像素值不变;

具体的公式如下

b2f383178ab7e0e243259e6c90a0c61c.png

THRESH_TOZERO_INV

(6)THRESH_MASK

(7)THRESH_OTSU,使用Otsu算法选择最佳阈值。

(8)THRESH_TRIANGLE,使用三角算法选择最佳阈值。

5、实验案例

#include

#include

#include

using namespace cv;

// 原图像

Mat srcImage, dstImage;

// 调整阈值类型的变量

int g_ThresholdType = 0;

int g_ThresholdValue = 128;

// 回调函数

static void OnThresholdMethod(int, void*);

int main(int argc, char** argv)

{

// 载入图像

srcImage = imread("lena.png");

// 判断图像是否为空

if (srcImage.empty())

{

printf("image error!");

return 0;

}

// 对原图像进行备份

dstImage = srcImage.clone();

namedWindow("原图");

imshow("原图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值