DrGraph原理示教 - OpenCV 4 功能 - 二值化

本文详细介绍了OpenCV中的inRange函数在图像二值化过程中的应用,以及如何使用阈值、基准偏差和分量偏差过滤来处理图像。同时提到了在实际应用中处理彩色图像时的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二值化,也就是处理结果为0或1,当然是针对图像的各像素而言的
1或0,对应于有无,也就是留下有用的,删除无用的,有用的部分,就是关心的部分
在图像处理中,也不仅仅只是1或0,因为这两个值看起来都是黑的,人眼很难分辨清楚,那就放大一些,255或0,黑白就出来了
目标识别、图像分割、目标提取等后续应用,很多会基于二值化的结果。所以图像分析的二值化处理是一个重要环节。比如优快云的OpenCV技能树:
在这里插入图片描述

广义来说,分析或处理的结果中,各像素点只在0/255间取值,那就算是二值化,所以阈值、腐蚀与膨胀、开运算与闭运算、连通区域分析、轮廓等都算是
但在OpenCV 4中,阈值的结果可能也是彩色图像,开闭运算的输入就是二值化图像… 这个概念可能是错的,因为我还没有从头处理开闭运算。
所以,还是自己按自己的标准来处理,利于理解就行,无所谓对错

inRange

OpenCV中的inRange()函数可以实现图像的二值化,其功能是将在两个阈值内的像素值设置为白色(255),而不在阈值区间内的像素值设置为黑色(0)。函数的语法格式如下:

void cv::inRange(InputArray _src, InputArray _lowerb, InputArray _upperb, OutputArray _dst);

其中,_src表示输入图像,可以是灰度图像或彩色图像;_lowerb表示下界的阈值,可以是一个标量值或与输入图像通道数相同的数组;_upperb表示上界的阈值,与_lowerb的类型相同,指定上界阈值;_dst表示输出图像,用于存储计算得到的阈值图像。
在这里插入图片描述
二值图像,可作为copyTo的参数,实现原图的部分拷贝
在这里插入图片描述
具体实现代码:

    cv::Mat originMat = dstMat.clone();
    int paramIndex = 0;
    bool combineMaskFlag = GetParamValue_Bool(paramIndex++);    // 0 - 过滤原图显示
    int min0 = GetParamValue_Int(paramIndex++);   // 1 - 通道0下限
    int max0 = GetParamValue_Int(paramIndex++);   // 2 - 通道0上限
    int min1 = GetParamValue_Int(paramIndex++);   // 3 - 通道1下限
    int max1 = GetParamValue_Int(paramIndex++);   // 4 - 通道1上限
    int min2 = GetParamValue_Int(paramIndex++);   // 5 - 通道2下限
    int max2 = GetParamValue_Int(paramIndex++);   // 6 - 通道2上限
    int dim = dstMat.channels();
    cv::Mat maskMat;
    if(dim == 1)
        inRange(dstMat, Scala
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值