zoukankan      html  css  js  c++  java
  • opencvadaptiveThreshold自适应阈值

    OTSU算法和最大熵算法,但这两种算法都属于全局阈值法,所以对于某些光照不均的图像,这种全局阈值分割的方法会显得苍白无力,如下图:

     此时应采用自适应阈值法(adaptiveThreshold),它的思想不是计算全局图像的阈值,而是根据图像不同区域亮度分布,计算其局部阈值,所以对于图像不同区域,能够自适应计算不同的阈值,因此被称为自适应阈值法。(其实就是局部阈值法)

    如何确定局部阈值呢?可以计算某个邻域(局部)的均值、中值、高斯加权平均(高斯滤波)来确定阈值

    #include<opencv2/opencv.hpp>
    #include<iostream>
    
    
    
    int main(int argc, char** argv) {
    
        cv::Mat srcImage = cv::imread("D:/bb/tu/6.png");
        cv::Mat srcGray;
        cv::cvtColor(srcImage, srcGray, cv::COLOR_RGB2GRAY);
        cv::imshow("srcGray", srcGray);
        cv::Mat dstImage;
    
        const int maxVal = 255;
        int adaptiveMethod = 0;
        int thresholdType = 1;
        int blockSize = 5;
        int constValue = 10;
    
        cv::adaptiveThreshold(srcGray, dstImage,maxVal, adaptiveMethod,thresholdType, blockSize,constValue);// 自适应阈值操作
        /*
        参数1:InputArray src:源图像
        参数2:OutputArray dst:输出图像,与源图像大小一致
        参数3:maxVal 预设最大值
        参数4:adaptiveMethod 在一个邻域内计算阈值所采用的算法,有两个取值,分别为 ADAPTIVE_THRESH_MEAN_C 和 ADAPTIVE_THRESH_GAUSSIAN_C 
                cv::ADAPTIVE_THRESH_MEAN_C=0 的计算方法是计算出领域的平均值再减去第七个参数double C的值
                cv::ADAPTIVE_THRESH_GAUSSIAN_C=1 的计算方法是计算出领域的高斯均值再减去第七个参数double C的值
        参数5:thresholdType 这是阈值类型,只有两个取值,分别为 cv::THRESH_BINARY=0 和 cv::THRESH_BINARY_INV=1
        参数6:blockSize 表示邻域大小,局部邻域大小为3、5、7等
        参数7:constValue    这个参数实际上是一个偏移值调整量,用均值和高斯计算阈值后,再加这个值就是最终阈值  
        */
    
        cv::imshow("dstImage", dstImage);
        
        cv::waitKey(0);
        return 0;
    }

  • 相关阅读:
    【Android开发】【第三方SDK】蒲公英摇一摇
    【Android开发】URL[] 转成 bitmap[]
    【Android开发】View 转 Bitmap
    【Android开发】Bitmap的质量压缩法
    【Android开发】监听图库数据库的变化
    【Android开发】Android 删除指定文件和文件夹
    【Android开发】安卓炫酷效果集合
    【Android开发】分割字符串工具类
    【初学者必读】能让你月薪过万的5大web前端核心技能
    30款最好的 Bootstrap 3.0 免费主题和模板
  • 原文地址:https://www.cnblogs.com/liming19680104/p/15703911.html
Copyright © 2011-2022 走看看