精华内容
下载资源
问答
  • threshold函数

    千次阅读 2015-08-24 20:10:39
    threshold函数 函数的作用: 对图像中的像素进行阈值处理,进行分割,常用于二值化处理 函数调用形式: C++: double threshold(InputArray src, OutputArray dst, double thresh, double maxval, int...

    threshold函数

    函数的作用:

    对图像中的像素进行阈值处理,进行分割,常用于二值化处理

    函数调用形式:

    C++: double threshold(InputArray src, OutputArray dst, double thresh, double maxval, int type)

    src 原始数组 (单通道 , 8-bit of 32-bit 浮点数). 

    dst 输出数组,必须与 src 的类型一致,或者为 8-bit. 

    threshold 阈值

     max_value 使用 CV_THRESH_BINARY 和 CV_THRESH_BINARY_INV 的最大值. threshold_type 阈值类型 

    函数 cvThreshold 对单通道数组应用固定阈值操作。该函数的典型应用是对灰度图像进行阈值操作得到二值图像。(cvCmpS 也可以达到此目的) 或者是去掉噪声,例如过滤很小或很大象素值的图像点。本函数支持的对图像取阈值的方法由 threshold_type 确定:

    threshold_type=CV_THRESH_BINARY:
    dst(x,y) = max_value, if src(x,y)>threshold
               0, otherwise
    
    threshold_type=CV_THRESH_BINARY_INV:
    dst(x,y) = 0, if src(x,y)>threshold
               max_value, otherwise
    
    threshold_type=CV_THRESH_TRUNC:
    dst(x,y) = threshold, if src(x,y)>threshold
               src(x,y), otherwise
    
    threshold_type=CV_THRESH_TOZERO:
    dst(x,y) = src(x,y), if (x,y)>threshold
               0, otherwise
    
    threshold_type=CV_THRESH_TOZERO_INV:
    dst(x,y) = 0, if src(x,y)>threshold
               src(x,y), otherwise

    代码示范

    #include "opencv2/imgproc/imgproc.hpp"
    #include "opencv2/highgui/highgui.hpp"
    #include <stdlib.h>
    #include <stdio.h>
    
    using namespace cv;
    
    /// 全局变量定义及赋值
    
    int threshold_value = 0;
    int threshold_type = 3;;
    int const max_value = 255;
    int const max_type = 4;
    int const max_BINARY_value = 255;
    
    Mat src, src_gray, dst;
    char* window_name = "Threshold Demo";
    
    char* trackbar_type = "Type: \n 0: Binary \n 1: Binary Inverted \n 2: Truncate \n 3: To Zero \n 4: To Zero Inverted";
    char* trackbar_value = "Value";
    
    /// 自定义函数声明
    void Threshold_Demo( int, void* );
    
    /**
     * @主函数
     */
    int main( int argc, char** argv )
    {
      /// 读取一副图片,不改变图片本身的颜色类型(该读取方式为DOS运行模式)
      src = imread( argv[1], 1 );
    
      /// 将图片转换成灰度图片
      cvtColor( src, src_gray, CV_RGB2GRAY );
    
      /// 创建一个窗口显示图片
      namedWindow( window_name, CV_WINDOW_AUTOSIZE );
    
      /// 创建滑动条来控制阈值
      createTrackbar( trackbar_type,
                      window_name, &threshold_type,
                      max_type, Threshold_Demo );
    
      createTrackbar( trackbar_value,
                      window_name, &threshold_value,
                      max_value, Threshold_Demo );
    
      /// 初始化自定义的阈值函数
      Threshold_Demo( 0, 0 );
    
      /// 等待用户按键。如果是ESC健则退出等待过程。
      while(true)
      {
        int c;
        c = waitKey( 20 );
        if( (char)c == 27 )
          { break; }
       }
    
    }
    
    
    /**
     * @自定义的阈值函数
     */
    void Threshold_Demo( int, void* )
    {
      /* 0: 二进制阈值
         1: 反二进制阈值
         2: 截断阈值
         3: 0阈值
         4: 反0阈值
       */
    
      threshold( src_gray, dst, threshold_value, max_BINARY_value,threshold_type );
    
      imshow( window_name, dst );
    }

    展开全文
  • Threshold函数

    2019-11-20 14:14:15
    函数原型如下: double threshold(InputArray src, OutputArray dst, double thresh, double maxval, int type) 参数信息: 第一个参数,InputArray类型的src,输入数组,填单通道 , 8或32位浮点类型的Ma...

    threshold 方法是通过遍历灰度图中点,将图像信息二值化,处理过后的图片只有二种色值。

    其函数原型如下:

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

    参数信息:

    第一个参数,InputArray类型的src,输入数组,填单通道 , 8或32位浮点类型的Mat即可。

    第二个参数,OutputArray类型的dst,函数调用后的运算结果存在这里,即这个参数用于存放输出结果,且和第一个参数中的Mat变量有一样的尺寸和类型。

    第三个参数,double类型的thresh,阈值的具体值。

    第四个参数,double类型的maxval,当第五个参数阈值类型type取 THRESH_BINARY 或THRESH_BINARY_INV阈值类型时的最大值.

    第五个参数,int类型的type,阈值类型,。

    其它参数很好理解,我们来看看第五个参数,第五参数有以下几种类型

    0: THRESH_BINARY 当前点值大于阈值时,取Maxval,也就是第四个参数,下面再不说明,否则设置为0

    1: THRESH_BINARY_INV 当前点值大于阈值时,设置为0,否则设置为Maxval

    2: THRESH_TRUNC 当前点值大于阈值时,设置为阈值,否则不改变

    3: THRESH_TOZERO 当前点值大于阈值时,不改变,否则设置为0

    4: THRESH_TOZERO_INV 当前点值大于阈值时,设置为0,否则不改变

    下面是简单应用实例代码片段:

    int nY20_thresh=96;
    
    int nY20_MaxThesh=255;
    
    void _onY20thresh(int,void*){
    
    Mat src;
    
    m_Mat.copyTo(src);
    
     
    
    Mat dst,edge,gray;  
    
     
    
    // 【1】创建与src同类型和大小的矩阵(dst)  
    
    dst.create( src.size(), src.type() );  
    
     
    
    // 【2】将原图像转换为灰度图像  
    
    cvtColor( src, gray, CV_BGR2GRAY );  
    
     
    
    // 【3】先用使用 3x3内核来降噪  
    
    blur( gray, edge, Size(3,3) );  
    
     
    
    //type选THRESH_BINARY,大于阈值的设置为maxval(255),其它置0
    
    threshold(edge, dst, nY20_thresh, 255, THRESH_BINARY);
    
     
    
     
    
    CVShow("threshold二值化灰图",dst,400,400);
    
     
    
     
    
    }
    
    展开全文
  • OpenCV threshold函数详解

    万次阅读 多人点赞 2018-07-03 17:33:56
    threshold函数作用:去掉噪,例如过滤很小或很大像素值的图像点。threshold函数原型:double threshold( InputArray src, OutputArray dst, double thresh, double maxval, int type );参数说明:src:原图像。dst...

    threshold函数作用:

    去掉噪,例如过滤很小或很大像素值的图像点。

    threshold函数python版原型:

    retval, dst = cv.threshold( src, thresh, maxval, type[, dst] ) 

    参数说明:

    src:原图像。

    dst:结果图像。
    thresh:当前阈值。
    maxVal:最大阈值,一般为255.

    thresholdType:阈值类型,主要有下面几种:

    enum ThresholdTypes {
        THRESH_BINARY     = 0,
        THRESH_BINARY_INV = 1,
        THRESH_TRUNC      = 2,
        THRESH_TOZERO     = 3,
        THRESH_TOZERO_INV = 4,
        THRESH_MASK       = 7,
        THRESH_OTSU       = 8,
        THRESH_TRIANGLE   = 16
    };

    返回值:
     retval: 与参数thresh一致
    dst: 结果图像

    编号阈值类型枚举
    注意
    1THRESH_BINARY

    2THRESH_BINARY_INV

    3THRESH_TRUNC

    4THRESH_TOZERO

    5THRESH_TOZERO_INV

    6THRESH_MASK
    不支持
    7THRESH_OTSU
    不支持32位
    8THRESH_TRIANGLE
    不支持32位

    具体说明如下:


    注意:

    THRESH_OTSU和THRESH_TRIANGLE是作为优化算法配合THRESH_BINARY、THRESH_BINARY_INV、THRESH_TRUNC、THRESH_TOZERO以及THRESH_TOZERO_INV来使用的。

    当使用了THRESH_OTSU和THRESH_TRIANGLE两个标志时,输入图像必须为单通道



    生成关系:



    下面通过代码来验证一下threshold的用法:

    import numpy as np
    import cv2
    #创建一个6x6的BGR三通道图片
    img6x6 = np.zeros((6,6,3), dtype=np.uint8) 
    #Blue通道取值0~99随机值
    img6x6[:,:,0] = np.random.randint(0, 100, size=36).reshape(6,6)
    #Green通道取值100~199随机值
    img6x6[:,:,1] = np.random.randint(100, 200, size=36).reshape(6,6)
    #Red通道取值200~255随机值
    img6x6[:,:,2] = np.random.randint(200, 256, size=36).reshape(6,6)
    print(img6x6)

    得到img6x6的BGR三通道数据:

    [[[ 62 171 226]
      [ 29 118 212]
      [ 61 151 200]
      [ 43 123 206]
      [ 58 146 232]
      [  2 124 246]]
    
     [[ 48 101 207]
      [ 32 194 228]
      [ 90 171 241]
      [ 36 152 244]
      [ 64 169 245]
      [ 71 106 202]]
    
     [[ 27 198 206]
      [ 39 193 213]
      [ 60 128 207]
      [ 53 134 248]
      [ 25 187 229]
      [ 72 116 229]]
    
     [[ 52 163 201]
      [ 39 189 251]
      [ 63 190 217]
      [ 73 139 212]
      [ 54 166 236]
      [ 43 191 200]]
    
     [[ 34 119 207]
      [ 36 110 209]
      [ 40 191 229]
      [ 60 100 228]
      [ 62 174 250]
      [ 41 115 209]]
    
     [[ 35 165 246]
      [ 50 182 218]
      [ 77 110 239]
      [ 44 106 245]
      [ 21 189 252]
      [ 64 144 241]]]

    观察结果我们发现img6x6[2][2][1]=128,我们取该值作为thresh值来演示THRESH_BINARY、THRESH_BINARY_INV等的作用。

    1) THRESH_BINARY

    我们取参数值thresh=128,maxval=255,flag = THRESH_BINARY

    cv2.threshold(img6x6, 128, 255, cv2.THRESH_BINARY)

    根据前面对THRESH_BINARY flag值的解释:


    预期得到的结果中,img6x6中>128的值均应变为255,<=128的值均应变为0。

    我们实际得到的结果为:

    [[[  0 255 255]
      [  0   0 255]
      [  0 255 255]
      [  0   0 255]
      [  0 255 255]
      [  0   0 255]]
    
     [[  0   0 255]
      [  0 255 255]
      [  0 255 255]
      [  0 255 255]
      [  0 255 255]
      [  0   0 255]]
    
     [[  0 255 255]
      [  0 255 255]
      [  0   0 255]
      [  0 255 255]
      [  0 255 255]
      [  0   0 255]]
    
     [[  0 255 255]
      [  0 255 255]
      [  0 255 255]
      [  0 255 255]
      [  0 255 255]
      [  0 255 255]]
    
     [[  0   0 255]
      [  0   0 255]
      [  0 255 255]
      [  0   0 255]
      [  0 255 255]
      [  0   0 255]]
    
     [[  0 255 255]
      [  0 255 255]
      [  0   0 255]
      [  0   0 255]
      [  0 255 255]
      [  0 255 255]]]

    与预期的结果一致。

    2)THRESH_BINARY_INV

    THRESH_BINARY_INV的作用与THRESH_BINARY相反,大于thresh的值置0,小于等于thresh的值置maxval:


    预期的结果与1)的结果完全相反。

    code:

    ret,dst=cv2.threshold(img6x6, 128, 255, cv2.THRESH_BINARY_INV)
    print(dst)
    dst输出:
    [[[255   0   0]
      [255 255   0]
      [255   0   0]
      [255 255   0]
      [255   0   0]
      [255 255   0]]
    
     [[255 255   0]
      [255   0   0]
      [255   0   0]
      [255   0   0]
      [255   0   0]
      [255 255   0]]
    
     [[255   0   0]
      [255   0   0]
      [255 255   0]
      [255   0   0]
      [255   0   0]
      [255 255   0]]
    
     [[255   0   0]
      [255   0   0]
      [255   0   0]
      [255   0   0]
      [255   0   0]
      [255   0   0]]
    
     [[255 255   0]
      [255 255   0]
      [255   0   0]
      [255 255   0]
      [255   0   0]
      [255 255   0]]
    
     [[255   0   0]
      [255   0   0]
      [255 255   0]
      [255 255   0]
      [255   0   0]
      [255   0   0]]]
    

    与预期结果完全一致。

    3)THRESH_TRUNC

    THRESH_TRUNC的作用是对大于thresh的值进行截断,其余值保留原值。


    code:

    ret,dst=cv2.threshold(img6x6, 128, 255, cv2.THRESH_TRUNC)
    print(dst)

    dst输出:

    [[[ 62 128 128]
      [ 29 118 128]
      [ 61 128 128]
      [ 43 123 128]
      [ 58 128 128]
      [  2 124 128]]
    
     [[ 48 101 128]
      [ 32 128 128]
      [ 90 128 128]
      [ 36 128 128]
      [ 64 128 128]
      [ 71 106 128]]
    
     [[ 27 128 128]
      [ 39 128 128]
      [ 60 128 128]
      [ 53 128 128]
      [ 25 128 128]
      [ 72 116 128]]
    
     [[ 52 128 128]
      [ 39 128 128]
      [ 63 128 128]
      [ 73 128 128]
      [ 54 128 128]
      [ 43 128 128]]
    
     [[ 34 119 128]
      [ 36 110 128]
      [ 40 128 128]
      [ 60 100 128]
      [ 62 128 128]
      [ 41 115 128]]
    
     [[ 35 128 128]
      [ 50 128 128]
      [ 77 110 128]
      [ 44 106 128]
      [ 21 128 128]
      [ 64 128 128]]]

    4) THRESH_TOZERO

    THRESH_TOZERO的作用是对大于thresh的值进行保留原值,小于或等于thresh的值置0:


    code:

    ret, dst=cv2.threshold(img6x6, 128, 255, cv2.THRESH_TOZERO)
    print(dst)

    dst输出:

    [[[  0 171 226]
      [  0   0 212]
      [  0 151 200]
      [  0   0 206]
      [  0 146 232]
      [  0   0 246]]
    
     [[  0   0 207]
      [  0 194 228]
      [  0 171 241]
      [  0 152 244]
      [  0 169 245]
      [  0   0 202]]
    
     [[  0 198 206]
      [  0 193 213]
      [  0   0 207]
      [  0 134 248]
      [  0 187 229]
      [  0   0 229]]
    
     [[  0 163 201]
      [  0 189 251]
      [  0 190 217]
      [  0 139 212]
      [  0 166 236]
      [  0 191 200]]
    
     [[  0   0 207]
      [  0   0 209]
      [  0 191 229]
      [  0   0 228]
      [  0 174 250]
      [  0   0 209]]
    
     [[  0 165 246]
      [  0 182 218]
      [  0   0 239]
      [  0   0 245]
      [  0 189 252]
      [  0 144 241]]]
    

    5) THRESH_TOZERO_INV

    THRESH_TOZERO_INV的作用与THRESH_TOZERO的作用完全相反,对大于thresh的值置0,其余值则保留:


    code:

    ret, dst=cv2.threshold(img6x6, 131, 255, cv2.THRESH_TOZERO_INV)
    print(dst)

    dst输出:

    [[[ 62   0   0]
      [ 29 118   0]
      [ 61   0   0]
      [ 43 123   0]
      [ 58   0   0]
      [  2 124   0]]
    
     [[ 48 101   0]
      [ 32   0   0]
      [ 90   0   0]
      [ 36   0   0]
      [ 64   0   0]
      [ 71 106   0]]
    
     [[ 27   0   0]
      [ 39   0   0]
      [ 60 128   0]
      [ 53   0   0]
      [ 25   0   0]
      [ 72 116   0]]
    
     [[ 52   0   0]
      [ 39   0   0]
      [ 63   0   0]
      [ 73   0   0]
      [ 54   0   0]
      [ 43   0   0]]
    
     [[ 34 119   0]
      [ 36 110   0]
      [ 40   0   0]
      [ 60 100   0]
      [ 62   0   0]
      [ 41 115   0]]
    
     [[ 35   0   0]
      [ 50   0   0]
      [ 77 110   0]
      [ 44 106   0]
      [ 21   0   0]
      [ 64   0   0]]]
    

    6)THRESH_OTSU

    THRESH_OTSU是需要搭配THRESH_BINARY、THRESH_BINARY_INV、THRESH_TRUNC、THRESH_TOZERO以及THRESH_TOZERO_INV来使用的。并且输入图像必须是灰度图像。

    所以,我们首先需要创建一个灰度图像:

    code:

    img_gray = cv2.cvtColor(img6x6,cv2.COLOR_BGR2GRAY)
    print(img_gray)

    得到的img_gray为:

    [[175   0   0   0 162   0]
     [  0 186 183 166 180   0]
     [181 181   0 159 181   0]
     [162 190 184   0 174 177]
     [  0   0 185   0 184   0]
     [174 178   0   0 189 164]]

    然后在通过THRESH_OTSU标准搭配其他标志位来对输入图像做处理,这里只演示搭配THRESH_BINARY标志的用法,

    code:

    ret,dst=cv2.threshold(img_gray, 127, 255, cv2.THRESH_TOZERO|cv2.THRESH_OTSU)
    print(dst)

    dst输出:

    [[175   0   0   0 162   0]
     [  0 186 183 166 180   0]
     [181 181   0 159 181   0]
     [162 190 184   0 174 177]
     [  0   0 185   0 184   0]
     [174 178   0   0 189 164]]

    对比一下不使用THRESH_OTSU时的输出,

    code:

    ret,dst=cv2.threshold(img_gray, 166, 255, cv2.THRESH_TOZERO)
    print(dst)

    dst输出:

    [[175   0   0   0   0   0]
     [  0 186 183   0 180   0]
     [181 181   0   0 181   0]
     [  0 190 184   0 174 177]
     [  0   0 185   0 184   0]
     [174 178   0   0 189   0]]

    7) THRESH_TRIANGLE

    THRESH_TRIANGLE用法与THRESH_OTSU用法一致,这里不做演示。

    综合示例

    Demo Code

    #encoding=utf-8
    
    
    import sys, cv2, numpy as np
    from ui_thresholdDemo import Ui_ThresoldDemo
    from PyQt5.QtWidgets import QApplication, QWidget, QFileDialog
    from PyQt5.QtGui import QImage, QPixmap
    
    
    class ThresholdDemo(QWidget, Ui_ThresoldDemo):
        
        def __init__(self):
            super().__init__()
            self.setupUi(self)
            self.setupSigSlots()
            self.param_threshold = 1
            self.param_maxVal    = 255
            self.param_thresholdType = cv2.THRESH_BINARY
            self.param_ExtendType = 0
            self.checkGray = False
            
        def setupSigSlots(self):
            self.btnBrowse.clicked.connect(self.slotBtnBrowse)
            self.parmThreshold.valueChanged.connect(self.slotThresholdChanged)
            self.paramMaxVal.valueChanged.connect(self.slotMaxValChanged)
            self.parmThresholdType.currentTextChanged[str].connect(self.slotThresholdTypeChanged)
            self.btnCheckGray.toggled.connect(self.slotCheckGray)
            self.parmThresholdType2.currentTextChanged[str].connect(self.slotThresholdType2Changed)
        
        def slotBtnBrowse(self):
            try:
                file, _ = QFileDialog.getOpenFileName(self, 'Open Image', 'D:\\tmp\\pics', '*.*', '*.*',)
                if file:
                    self.imagePath.setText(file)
                    img_init = cv2.imdecode(np.fromfile(file, dtype=np.uint8), -1)
                    self.img_threshold = img_init.copy()
                    cv2.cvtColor(img_init, cv2.COLOR_BGR2RGB, img_init)
                    h,w,c = img_init.shape
                    qImg = QImage(img_init, w, h, w*c, QImage.Format_RGB888)
                    self.initPicFrame.setPixmap(QPixmap.fromImage(qImg))
                    self.updateThresholdImage()
            except Exception as e:
                print(e)
                
        def updateThresholdImage(self):
            try:
                img = self.img_threshold.copy()
                if self.checkGray:
                    img_gray = np.zeros((img.shape[0], img.shape[1]), dtype=np.uint8)
                    cv2.cvtColor(img, cv2.COLOR_BGR2GRAY, img_gray)
                    ret, img_threshold = cv2.threshold(img_gray, self.param_threshold, self.param_maxVal, self.param_thresholdType|self.param_ExtendType)
                    print('thresh:{}, maxval:{}, flags:{}|{}'.format(self.param_threshold, self.param_maxVal, self.param_thresholdType, self.param_ExtendType))
                    h,w = img_threshold.shape
                    qImg = QImage(img_threshold, w, h, w, QImage.Format_Indexed8)
                    self.thresholdPicFrame.setPixmap(QPixmap.fromImage(qImg))
                else:
                    ret, img_threshold = cv2.threshold(img, self.param_threshold, self.param_maxVal, self.param_thresholdType)
                    #ret: ret equals to self.param_threshold, it canbe ignored
                    h,w,c = img_threshold.shape
                    cv2.cvtColor(img_threshold, cv2.COLOR_BGR2RGB, img_threshold)
                    qImg = QImage(img_threshold, w, h, w*c, QImage.Format_RGB888)
                    self.thresholdPicFrame.setPixmap(QPixmap.fromImage(qImg))
            except Exception as e:
                print(e)
        
        def slotThresholdChanged(self, val):
            self.param_threshold = val
            self.labelThreshold.setText('threshold:{:>3}'.format(val))
            self.updateThresholdImage()
        
        def slotMaxValChanged(self, val):
            self.param_maxVal    = val
            self.labelMaxVal.setText(' maxValue:{:>3}'.format(val))
            self.updateThresholdImage()
        
        def slotThresholdTypeChanged(self, type):
            type_dic = {
                'THRESH_BINARY': cv2.THRESH_BINARY,
                'THRESH_BINARY_INV': cv2.THRESH_BINARY_INV,
                'THRESH_TRUNC': cv2.THRESH_TRUNC,
                'THRESH_TOZERO': cv2.THRESH_TOZERO,
                'THRESH_TOZERO_INV': cv2.THRESH_TOZERO_INV,
                #'THRESH_MASK': cv2.THRESH_MASK,
                #'THRESH_OTSU': cv2.THRESH_OTSU,
                #'THRESH_TRIANGLE': cv2.THRESH_TRIANGLE,
                }
            self.param_thresholdType = type_dic[type]
            #print(type,self.param_thresholdType )
            self.updateThresholdImage()
            
        def slotThresholdType2Changed(self, type):
            try:
                extend_type = {
                    "THRESH_OTSU":cv2.THRESH_OTSU,
                    "THRESH_TRIANGLE":cv2.THRESH_TRIANGLE
                    }
                if type == 'NONE':
                    self.param_ExtendType = 0
                    self.checkGray = False
                    self.btnCheckGray.setEnabled(True)
                else:
                    self.param_ExtendType = extend_type[type]
                    self.checkGray = True
                    self.btnCheckGray.setEnabled(False)
                    
                print('self.param_ExtendType: ', self.param_ExtendType)
                self.updateThresholdImage()
            except Exception as e:
                print(e)
                
    
    
        def slotCheckGray(self, bGray):
            self.checkGray = bGray
            self.updateThresholdImage()
    
    
    
    
    def thresholdDemo():
        img6x6 = np.zeros((6,6,3), dtype=np.uint8)
        img6x6[:,:,0] = np.random.randint(0, 100, size=36).reshape(6,6)
        img6x6[:,:,1] = np.random.randint(100, 200, size=36).reshape(6,6)
        img6x6[:,:,2] = np.random.randint(200, 256, size=36).reshape(6,6)
        cv2.threshold(img6x6, 127, 255, cv2.THRESH_BINARY)
    
    
    
    
    if __name__ == '__main__':
        qApp = QApplication(sys.argv)
        demo = ThresholdDemo()
        demo.show()
        qApp.exec_()
    
    
    
    
    
    
    
    
    
    

    程序运行结果:


    完整Code下载,请点这里


    展开全文
  • threshold函数定义如下: def threshold(src, thresh, maxval, type, dst=None): 第一个参数:src。 input array (multiple-channel, 8-bit or 32-bit floating point). 即为输入图像,但需转化为8或32位单通道,即...
  • opencv阈值分割threshold函数ThresholdTypes enum ThresholdTypes { THRESH_BINARY = 0, //!< \f[\texttt{dst} (x,y) = \fork{\texttt{maxval}}{if \(\texttt{src}(x,y) > \texttt{thresh}\)}{0}{otherwise}\...

    opencv阈值分割threshold函数ThresholdTypes

    enum ThresholdTypes {
        THRESH_BINARY     = 0, //!< \f[\texttt{dst} (x,y) =  \fork{\texttt{maxval}}{if \(\texttt{src}(x,y) > \texttt{thresh}\)}{0}{otherwise}\f]
        THRESH_BINARY_INV = 1, //!< \f[\texttt{dst} (x,y) =  \fork{0}{if \(\texttt{src}(x,y) > \texttt{thresh}\)}{\texttt{maxval}}{otherwise}\f]
        THRESH_TRUNC      = 2, //!< \f[\texttt{dst} (x,y) =  \fork{\texttt{threshold}}{if \(\texttt{src}(x,y) > \texttt{thresh}\)}{\texttt{src}(x,y)}{otherwise}\f]
        THRESH_TOZERO     = 3, //!< \f[\texttt{dst} (x,y) =  \fork{\texttt{src}(x,y)}{if \(\texttt{src}(x,y) > \texttt{thresh}\)}{0}{otherwise}\f]
        THRESH_TOZERO_INV = 4, //!< \f[\texttt{dst} (x,y) =  \fork{0}{if \(\texttt{src}(x,y) > \texttt{thresh}\)}{\texttt{src}(x,y)}{otherwise}\f]
        THRESH_MASK       = 7,
        THRESH_OTSU       = 8, //!< flag, use Otsu algorithm to choose the optimal threshold value
        THRESH_TRIANGLE   = 16 //!< flag, use Triangle algorithm to choose the optimal threshold value
    };
    

    阈值类型:
    THRESH_BINARY:过门限的值设置为maxVal,其它值置零

    THRESH_BINARY_INV:过门限的值置零,其它值设置为maxVal

    THRESH_TRUNC:过门限的值设置为门限值,其它值置不变

    THRESH_TOZERO:过门限的值不变,其它值置零

    THRESH_TOZERO_INV:过门限的值置零,其它值不变
    阈值类型图示
    在这里插入图片描述

    展开全文
  • OpenCV函数介绍——threshold函数,设置阈值 先看一下函数参数解释: 其中,参数分别为源图像,目标图像,阈值,最大值,类型。 其中,阈值指代一个划分值,大于阈值,则像素值设置为maxval,否则,设置为0,...
  • halcon local_threshold函数介绍 local_threshold(Image : Region : Method, LightDark, GenParamName, GenParamValue : )使用Method中的阈值方法分割单通道图像,并在Region 中返回分割后的区域。目前,操作符只...
  • OpenCV代码提取: threshold函数的实现

    千次阅读 2016-09-10 12:14:19
    OpenCV代码提取: threshold函数的实现
  • 二值化的cv2 threshold函数
  • halcon5:var_threshold函数

    千次阅读 2019-07-08 11:34:08
    halcon5:var_threshold函数 (1)参数说明: var threshold(Image : Region : MaskWidth, MaskHeight, StdDevScale, AbsThreshold, LightDark:) ①Image:输入图像; ②MaskWidth, MaskHeight:是...
  • 利用OpenCV的threshold函数实现双阈值法二值化操作的源码!-附件资源
  • OpenCV-cv2.threshold函数

    2021-01-30 19:41:28
    threshold函数用于图像二值化 有四个参数,第一个是对象图片,第二个是阈值,第三个是像素最大值,第四个是修改类型,重点是第四个参数 第四个参数有一下类型: cv2.THRESH_BINARY cv2.THRESH_BBINARY_INV cv2....
  • opencv中Threshold函数的介绍

    千次阅读 2017-07-12 21:13:08
    Threshold函数典型的应用是对灰度图像进行阈值操作得到二值图像。 double threshold( const Mat& src, Mat& dst, double thresh,double maxVal, int thresholdType ); src:8或者32位浮点类型原图像。 ...
  • opencv学习—threshold函数的使用 目录 opencv学习—threshold函数的使用 阈值类型 python代码: 示例如下: 参考博客 图像阈值分割是一种广泛应用的分割技术,利用图像中要提取的目标区域与其背景在灰度特性...
  • Threshold函数详解

    千次阅读 2019-05-28 11:11:49
    threshold 方法是通过遍历灰度图中点,将图像信息二值化,处理过后的图片只有二种色值。...其函数原型如下: double threshold(InputArray src, OutputArray dst, double thresh, double maxval, in...
  • 13、threshold函数

    2021-02-25 08:24:35
    一、threshold()函数形式 retval,dst = cv2.threshold(src,thresh,maxval,type) 输入参数: src:需要处理的图像 thresh:阈值 maxval:最大像素值 type:阈值分割类型 输出参数: retval:阈值 dst:处理...
  • 在使用threshold函数进行OTSU阈值分割时,系统报错如下![图片说明](https://img-ask.csdn.net/upload/201911/08/1573143392_418003.png) 其中,h是HSV图像分割通道后得到的H通道。 但是 点击这![图片说明]...
  • 图像二值化函数cv2.threshold函数的介绍。 图像的二值化,就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的只有黑和白的视觉效果(灰度值0:黑,灰度值255:白). 在图像中除了目标物体和...
  • 函数适用于多通道数组的固定阈值,函数典型用于一个灰度图像输出的二进制图像(compare 函数也能达到这个目的),或者是为了消除噪声,由此过滤出太小的或者太大的像素。此函数提供了几种阈值类型,他们由参数type来...
  • OpenCV基础——threshold函数的使用

    万次阅读 多人点赞 2017-08-10 12:30:55
    图像的二值化就是将图像上的像素点的灰度值设置为0或255,这样将使...OpenCV中提供了函数cv::threshold(); 注意:作者采用OpenCV 3.0.0 函数原型 参数说明 src:源图像,可以为8位的灰度图,也可以为
  • opencv2函数学习之threshold:实现图像阈值化  ...在opencv2中,threshold函数可以进行阈值化操作。 double threshold( const Mat& src, Mat& dst, double thresh,double maxVal, int thr
  • opencv之threshold函数

    2019-07-08 20:32:55
    threshold 通常用来筛选符合有个值域内的信息 ![(https://img-blog.csdnimg.cn/20190708202926204.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,433
精华内容 573
关键字:

threshold函数