DrGraph原理示教 - OpenCV 4 功能 - 阈值

这篇具有很好参考价值的文章主要介绍了DrGraph原理示教 - OpenCV 4 功能 - 阈值。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

普通阈值

OpenCV中的阈值用于相对于提供的阈值分配像素值。在阈值处理中,将每个像素值与阈值进行比较,如果像素值小于阈值则设置为0,否则设置为最大值(一般为255)。
在OpenCV中,有多种阈值类型可供选择,以下是一些常见的阈值类型:
二进制阈值化:选择一个特定的阈值量,大于该阈值的像素点的灰度值设定为最大值(如8位灰度值最大为255),小于该阈值的像素点的灰度值设定为0。
反二进制阈值化:与二进制阈值化相似,只是最后的设定值相反。在8位灰度图中,例如大于阈值的设定为0,而小于该阈值的设定为255。
截断阈值化:同样需要选择一个阈值,图像中大于该阈值的像素点被设定为该阈值,小于该阈值的保持不变。
阈值化为0:选择一个阈值,然后对图像做如下处理:1. 像素点的灰度值大于该阈值的不进行任何改变;2. 像素点的灰度值小于该阈值的,其灰度值全部变为0。
反阈值化为0:与阈值化为0类似,只是像素点的灰度值大于该阈值的不进行任何改变,而小于该阈值的,其灰度值全部变为0。
其实就是调用threshold()函数进行阈值处理,它有4个参数:
参数1:需要处理的原图,一般是灰度图。
参数2:设定的阈值。
参数3:最大阈值,一般为255。
参数4:阈值的方式,主要有5种,分别为cv.THRESH_BINARY、cv.THRESH_BINARY_INV、cv.THRESH_TRUNC、cv.THRESH_TOZERO、cv.THRESH_TOZERO_INV。

/** @brief Applies a fixed-level threshold to each array element.

The function applies fixed-level thresholding to a multiple-channel array. The function is typically
used to get a bi-level (binary) image out of a grayscale image ( #compare could be also used for
this purpose) or for removing a noise, that is, filtering out pixels with too small or too large
values. There are several types of thresholding supported by the function. They are determined by
type parameter.

Also, the special values #THRESH_OTSU or #THRESH_TRIANGLE may be combined with one of the
above values. In these cases, the function determines the optimal threshold value using the Otsu's
or Triangle algorithm and uses it instead of the specified thresh.

@note Currently, the Otsu's and Triangle methods are implemented only for 8-bit single-channel images.

@param src input array (multiple-channel, 8-bit or 32-bit floating point).
@param dst output array of the same size  and type and the same number of channels as src.
@param thresh threshold value.
@param maxval maximum value to use with the #THRESH_BINARY and #THRESH_BINARY_INV thresholding
types.
@param type thresholding type (see #ThresholdTypes).
@return the computed threshold value if Otsu's or Triangle methods used.

@sa  adaptiveThreshold, findContours, compare, min, max
 */
CV_EXPORTS_W double threshold( InputArray src, OutputArray dst,
                               double thresh, double maxval, int type );

5种阈值方式cv.THRESH_BINARY、cv.THRESH_BINARY_INV、cv.THRESH_TRUNC、cv.THRESH_TOZERO、cv.THRESH_TOZERO_INV的效果分别为
DrGraph原理示教 - OpenCV 4 功能 - 阈值,OpenCV,原理示教,DrGraph,opencv,DrGraph,原理示教
DrGraph原理示教 - OpenCV 4 功能 - 阈值,OpenCV,原理示教,DrGraph,opencv,DrGraph,原理示教
DrGraph原理示教 - OpenCV 4 功能 - 阈值,OpenCV,原理示教,DrGraph,opencv,DrGraph,原理示教
DrGraph原理示教 - OpenCV 4 功能 - 阈值,OpenCV,原理示教,DrGraph,opencv,DrGraph,原理示教
DrGraph原理示教 - OpenCV 4 功能 - 阈值,OpenCV,原理示教,DrGraph,opencv,DrGraph,原理示教
从别的地方看,threshold是处理灰度图,不过从实际运行情况【OpenCV 4.6】来看,彩色图也支持threshold,目测是针对各通道进行threshold后再合成结果图像。有时间看下源码就可以不用猜测了。
从头文件注释中可以看到

Also, the special values #THRESH_OTSU or #THRESH_TRIANGLE may be combined with one of the
above values. In these cases, the function determines the optimal threshold value using the Otsu's
or Triangle algorithm and uses it instead of the specified thresh.
@note Currently, the Otsu's and Triangle methods are implemented only for 8-bit single-channel images.

即THRESH_OTSU与THRESH_TRIANGLE可组合。这个的结果是8位单通道图,应该是在处理前就将其余类型图像转化为灰度图了
DrGraph原理示教 - OpenCV 4 功能 - 阈值,OpenCV,原理示教,DrGraph,opencv,DrGraph,原理示教
DrGraph原理示教 - OpenCV 4 功能 - 阈值,OpenCV,原理示教,DrGraph,opencv,DrGraph,原理示教

智能阈值

运行发现,THRESH_OTSU与THRESH_TRIANGLE的运算结果与阈值大小无关。
这有点象智能阈值,即阈值是智能或自动确定的。
而真正的智能阈值,也叫自适应阈值,是由adaptiveThreshold函数负责处理

/** @brief Applies an adaptive threshold to an array.

The function transforms a grayscale image to a binary image according to the formulae:
-   **THRESH_BINARY**
    \f[dst(x,y) =  \fork{\texttt{maxValue}}{if \(src(x,y) > T(x,y)\)}{0}{otherwise}\f]
-   **THRESH_BINARY_INV**
    \f[dst(x,y) =  \fork{0}{if \(src(x,y) > T(x,y)\)}{\texttt{maxValue}}{otherwise}\f]
where \f$T(x,y)\f$ is a threshold calculated individually for each pixel (see adaptiveMethod parameter).

The function can process the image in-place.

@param src Source 8-bit single-channel image.
@param dst Destination image of the same size and the same type as src.
@param maxValue Non-zero value assigned to the pixels for which the condition is satisfied
@param adaptiveMethod Adaptive thresholding algorithm to use, see #AdaptiveThresholdTypes.
The #BORDER_REPLICATE | #BORDER_ISOLATED is used to process boundaries.
@param thresholdType Thresholding type that must be either #THRESH_BINARY or #THRESH_BINARY_INV,
see #ThresholdTypes.
@param blockSize Size of a pixel neighborhood that is used to calculate a threshold value for the
pixel: 3, 5, 7, and so on.
@param C Constant subtracted from the mean or weighted mean (see the details below). Normally, it
is positive but may be zero or negative as well.

@sa  threshold, blur, GaussianBlur
 */
CV_EXPORTS_W void adaptiveThreshold( InputArray src, OutputArray dst,
                                     double maxValue, int adaptiveMethod,
                                     int thresholdType, int blockSize, double C );

参数说明如下:
src:输入图像。
dst:输出图像。
maxValue:使用CV_THRESH_BINARY和CV_THRESH_BINARY_INV的最大值。
adaptive_method:自适应阈值算法使用,可以选择CV_ADAPTIVE_THRESH_MEAN_C或CV_ADAPTIVE_THRESH_GAUSSIAN_C。
thresholdType:阈值类型,可以选择CV_THRESH_BINARY或CV_THRESH_BINARY_INV。
blockSize:邻域大小,默认值为3。
自适应阈值方法的思想是根据图像不同区域的亮度分布,计算其局部阈值,从而能够自适应地处理图像的不同区域。这种方法可以更好地处理明暗差异较大的图像,并且可以在一定程度上减轻光照不均对图像分割的影响。
通过调参方式查看的代码:

// [基本 - 智能阈值」类 - 滤镜处理
    dstMat = CvHelper::ChangeMatDim(dstMat, 1);
    int paramIndex = 0;
    int adaptiveMethod = GetParamValue_Int(paramIndex++); // 0 - 算法
    int thresholdType = GetParamValue_Int(paramIndex++);   // 1 - 类型
    int maxValue = GetParamValue_Int(paramIndex++);   // 2 - 最大值
    int blockSize = GetParamValue_Int(paramIndex++);       // 3 - 块大小
    if(blockSize % 2 == 0)
        blockSize++;
    int C = GetParamValue_Int(paramIndex++);     // 4 - 常数
    adaptiveThreshold(dstMat, dstMat, maxValue, adaptiveMethod, thresholdType, blockSize, C);

DrGraph原理示教 - OpenCV 4 功能 - 阈值,OpenCV,原理示教,DrGraph,opencv,DrGraph,原理示教
其实,阈值的原理不多,有个直观的感受即可。
运行效果:

OpenCV 4 功能 - 阈值

CSDN的视频上传后,模糊了不少,可能是免费的缘故吧,那就凑合用凑合看。文章来源地址https://www.toymoban.com/news/detail-776975.html

到了这里,关于DrGraph原理示教 - OpenCV 4 功能 - 阈值的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 入门OpenCV:图像阈值处理

    图像阈值是一种简单、高效的图像分割方法,目的是将图像转换成二值图像。这个过程涉及比较像素值和阈值,根据比较结果来确定每个像素点的状态(前景或背景)。图像阈值在处理二维码、文本识别、物体跟踪等领域中非常有用。本博客旨在简介OpenCV中的阈值处理方法,

    2024年02月19日
    浏览(46)
  • OpenCV自学笔记九:阈值处理

    1. 阈值处理(Thresholding):阈值处理是一种图像分割的方法,它根据像素灰度值与设定的阈值进行比较,将像素分为两个类别(例如黑白、前景背景等)。阈值处理可以用于目标检测、图像增强等应用。在OpenCV中,常用的阈值处理函数是`cv2.threshold()`。 2. threshold函数:`cv2.t

    2024年02月08日
    浏览(41)
  • opencv(20) 图像阈值(二值化)

    二值化核心思想,设阈值,大于阈值的为0(黑色)或 255(白色),使图像称为黑白图。 阈值可固定,也可以自适应阈值。 自适应阈值一般为一点像素与这点为中序的区域像素平均值或者高斯分布加权和的比较,其中可以设置一个差值也可以不设置。 图像的阈值化旨在提取

    2024年02月02日
    浏览(52)
  • OpenCV阈值处理(threshold函数、自适应阈值处理、Otsu处理)

    目录 阈值处理 一.threshold函数 1.二值化阈值处理(cv2.THRESH_BINARY) 2.反二值化阈值处理( cv2.THRESH_BINARY_INV) 3.截断阈值化处理(cv2.THRESH_TRUNC) 4.超阈值零处理(cv2.THRESH_TOZERO_INV) 5.低阈值零处理(cv2.THRESH_TOZERO)  二.自适应阈值处理  三.Otsu处理 阈值处理是指剔除图像内像素

    2024年02月12日
    浏览(49)
  • OpenCV 入门教程:全局阈值处理

    全局阈值处理是图像处理中常用的技术之一,用于将图像转换为二值图像,从而提取感兴趣的目标区域。在 OpenCV 中,全局阈值处理可以通过简单的像素比较来实现。本文将以全局阈值处理为中心,为你介绍使用 OpenCV 进行二值图像处理的基本步骤和实例。 😃😄 ❤️ ❤️

    2024年02月13日
    浏览(50)
  • 10- OpenCV:基本阈值操作(Threshold)

    目录 1、图像阈值 2、阈值类型 3、代码演示 1、图像阈值 (1)图像阈值(threshold)含义:是将图像中的像素值划分为不同类别的一种处理方法。通过设定一个特定的阈值,将像素值与阈值进行比较,根据比较结果将像素分为两个或多个类别。         阈值 是什么?简单点

    2024年01月18日
    浏览(50)
  • C++OpenCV(6):图像阈值操作

    🔆 文章首发于我的个人博客:欢迎大佬们来逛逛 🔆 OpenCV项目地址及源代码:点击这里 阈值又叫临界值,是指一个效应能够产生的最低值或最高值。 例如我们选择的阈值为125,则图像中高于125像素值的会变白,而低于125像素值的会变黑。做到一副图像中利用阈值分割出我们

    2024年02月16日
    浏览(45)
  • Opencv+Python笔记(五)图像阈值化处理

    图像阈值化可以理解为一个简单的图像分割操作,阈值又称为临界值,它的目的是确定出一个范围,然后这个范围内的像素点使用同一种方法处理,而阈值之外的部分则使用另一种处理方法或保持原样。 阈值处理有2种方式,一种是固定阈值方式,又包括多种处理模式,另一

    2023年04月26日
    浏览(42)
  • opencv(三)边界填充、图像融合、图像阈值处理

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 边界填充就是将图片按一定的方法将图片的四周向外填充并将图片放大 因为opencv中的颜色通道不是RGB而是BGR,所以我们要用到之前讲到的分割将颜色通道重新整合成RGB后再用matplotlib库将其画出 BORDER_R

    2024年02月21日
    浏览(59)
  • opencv中Canny的高低阈值参数简析

    相信很多同学在使用Canny函数的时候只知道高阈值和低阈值调高或者调低有什么用,就像下面的总结一样: 低于阈值1的像素点会被认为不是边缘; 高于阈值2的像素点会被认为是边缘; 在阈值1和阈值2之间的像素点,若与第2步得到的边缘像素点相邻,则被认为是边缘,否则被

    2024年02月06日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包