• OpenCV-自适应阈值化


    自适应阈值化的函数为:

    AdaptiveThreshold

    自适应阈值方法

    void cvAdaptiveThreshold( const CvArr* src, CvArr* dst, double max_value,
                              int adaptive_method=CV_ADAPTIVE_THRESH_MEAN_C,
                              int threshold_type=CV_THRESH_BINARY,
                              int block_size=3, double param1=5 );
    
    src
    输入图像.
    dst
    输出图像.
    max_value
    使用 CV_THRESH_BINARY 和 CV_THRESH_BINARY_INV 的最大值.
    adaptive_method
    自适应阈值算法使用:CV_ADAPTIVE_THRESH_MEAN_C 或 CV_ADAPTIVE_THRESH_GAUSSIAN_C (见讨论).
    threshold_type
    取阈值类型:必须是下者之一
    • CV_THRESH_BINARY,
    • CV_THRESH_BINARY_INV
    block_size
    用来计算阈值的象素邻域大小: 3, 5, 7, ...
    param1
    与方法有关的参数。对方法 CV_ADAPTIVE_THRESH_MEAN_C 和 CV_ADAPTIVE_THRESH_GAUSSIAN_C, 它是一个从均值或加权均值提取的常数(见讨论), 尽管它可以是负数。

    函数 cvAdaptiveThreshold 将灰度图像变换到二值图像,采用下面公式:

    threshold_type=CV_THRESH_BINARY:
    dst(x,y) = max_value, if src(x,y)>T(x,y)
               0, otherwise
    
    threshold_type=CV_THRESH_BINARY_INV:
    dst(x,y) = 0, if src(x,y)>T(x,y)
               max_value, otherwise
    

    其中 TI 是为每一个象素点单独计算的阈值

    对方法 CV_ADAPTIVE_THRESH_MEAN_C,先求出块中的均值,再减掉param1。

    对方法 CV_ADAPTIVE_THRESH_GAUSSIAN_C ,先求出块中的加权和(gaussian), 再减掉param1。


    ================================================================================================================

    下面的例题对阈值化和自适应阈值化进行了比较:

    1. #include "StdAfx.h"  
    2. #include <cv.h>    
    3. #include <highgui.h>    
    4. #include <math.h>    
    5. IplImage* Igray = 0;    
    6. IplImage* It = 0;    
    7. IplImage* Iat;    
    8. void main()    
    9. {    
    10.     Igray = cvLoadImage("lena.png", CV_LOAD_IMAGE_GRAYSCALE);    
    11.     It = cvCreateImage(cvSize(Igray->width, Igray->height),IPL_DEPTH_8U, 1);    
    12.     Iat = cvCreateImage(cvSize(Igray->width, Igray->height),IPL_DEPTH_8U, 1);    
    13.     cvThreshold(Igray, It, 150, 255,CV_THRESH_BINARY);    
    14.     cvAdaptiveThreshold(Igray, Iat, 255, CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY, 3, 5);    
    15.     cvNamedWindow("orignal", 1);    
    16.     cvNamedWindow("threshold", 1);    
    17.     cvNamedWindow("adaptiveThresh", 1);    
    18.     cvShowImage("orignal", Igray);    
    19.     cvShowImage("threshold", It);    
    20.     cvShowImage("adaptiveThresh", Iat);    
    21.     cvWaitKey(0);    
    22.     cvReleaseImage(&Igray);    
    23.     cvReleaseImage(&It);    
    24.     cvReleaseImage(&Iat);    
    25.     cvDestroyWindow("orignal");    
    26.     cvDestroyWindow("threshold");    
    27.     cvDestroyWindow("adaptiveThresh");    
    28.     
    29. }    

    运算结果为:


    参考文献:

    1.学习OpenCV,于仕祺,刘瑞祯,清华大学出版社,pp.159-161

    2.http://blog.csdn.net/cartoonface/article/details/6011334

    3.http://www.opencv.org.cn/index.php/Cv%E5%9B%BE%E5%83%8F%E5%A4%84%E7%90%86#AdaptiveThreshold

    转自:http://blog.csdn.net/superdont/article/details/6661994

  • 相关阅读:
    zookeeper集群的部署
    【转】始于Jupyter Notebooks:一份全面的初学者实用指南
    【转】Jupyter Notebook主题字体设置及自动代码补全
    【转】pip install 快速下载
    【转】Sublime Text 3 常用快捷键
    【转】Python——DataFrame基础操作
    【转】sqlite3 小结
    【转】SQLite3的安装与使用
    Python Pandas pandas.DataFrame.to_sql函数方法的使用
    处理异常 ‘try’——‘except’ 方法
  • 原文地址:https://www.cnblogs.com/fag888/p/5789127.html
Copyright © 2020-2023  润新知