zoukankan      html  css  js  c++  java
  • 阈值处理——实例分析

    上篇博客实现了一个阈值处理的例子,现在主要来讲解一相关程序;

    首先谈谈createTrackbar函数,也就是滑动条;

    createTrackbar("阈值大小:",
    		  "【效果图】",
    		  &g_ThresholdValue,
    		  255,
    		  OnThresholdMethod);
    
    	  createTrackbar("阈值类型:",  //滑动名
    		  "【效果图】",         //在哪个窗口
    		  &g_ThresholdType,    //g_ThresholdType这个变量值等于滑动条位置
    8, //最大值
    OnThresholdMethod); // 调用回调函数 OnThresholdMethod(0, 0);

    在Opencv中,createTrackbar函数可用于创建一个可以调整数值的滑动条。函数原型如下:

    CV_EXPORTS int createTrackbar(const String& trackbarname,
                                                    const String& winname,
                                                    int* value, 
                                                    int count,                                        
                                                    TrackbarCallback onChange = 0,
                                                    void* userdata = 0);                                        

     参数1:滑动条轨迹名

     参数2:滑动条依附的窗口名

     参数3:滑块的位置,创建时,滑块初始位置就是这个变量当前的值

     参数4:轨迹的最大值

     参数5:回调函数

     参数6:默认0,用户传给回调函数的数据,如果第三个值为全局变量,忽略这个值.

    如果使用第6个参数,则作为参数传给回调函数的usrdata

    这个createTrackbar函数创建一个具有特定名称和范围的轨迹条(滚动条,或者说是滑块范围控制工具),指定一个和轨迹条位置同步的变量。而且要指定回调函数,在轨迹条位置改变的时候来调用这个回调函数。创建的轨迹条显示在指定的winname所代表的窗口上。

    回调函数TrackbarCallback转定义如下

    typedef void (*TrackbarCallback)(int pos, void* userdata);

    参数1:其中第一个参数是跟踪栏位置

    参数2:第二个参数是用户数据,如果回调函数是NULL指针,则不会调用回调函数,而只会更新值(比如窗口中的图像数据地址)

    (*TrackbarCallback)为函数void (int pos,void* userdata)的别名

    我们生活中大多数看到的彩色图片都是RGB类型,但是在进行图像处理时,需要用到灰度图、二值图、HSV、HSI等颜色制式,opencv提供了cvtColor()函数来实现这些功能。首先看一下cvtColor函数定义:

    C++: void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0 );
    1
    参数解释:
    . InputArray src: 输入图像即要进行颜色空间变换的原图像,可以是Mat类
    . OutputArray dst: 输出图像即进行颜色空间变换后存储图像,也可以Mat类
    . int code: 转换的代码或标识,即在此确定将什么制式的图片转换成什么制式的图片,后面会详细将
    . int dstCn = 0: 目标图像通道数,如果取值为0,则由src和code决定

    本次实验是

    函数的作用是将一个图像从一个颜色空间转换到另一个颜色空间

       函数threshold()是对单通道的灰度图像进行阙值处理的(函数compare()也可以达到同样的效果)。

         彩色图像可以使用cvtColor(strImage,grayImage,COLOR_RGB2GRAY)来变为灰度图像。

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

          第一个参数为输入的图像,Mat类型的即可。

          第二个参数为输出图像,且和输入图像有同等大小和类型

          第三个参数为设定阙值的具体值

          第四个参数 maxval是当第五个参数类型为CV_THRESH_BINARY和CV_THRESH_BINARY_INV是的最大值


    具体函数解析可参考博文: 
    原文:https://www.cnblogs.com/fcfc940503/p/11244607.html

    或者:https://blog.csdn.net/keith_bb/article/details/53470170 

    前面博文回调函数代码解析;

     void OnThresholdMethod(int, void*)
      {
    	  Mat tmpImage = srcImage.clone();
    	  // 设置二值化的类型
    	  //目前,Otsu或者Triangle算法仅支持8位单通道图像的实现
    	  // 因此与这两个算法组合的时候,需要将图像转换为灰度图像
    	  if (g_ThresholdType == 5)
    	  {
    		  if (srcImage.channels() == 3)
    			  cvtColor(srcImage, tmpImage, COLOR_BGR2GRAY);
    		  g_ThresholdType = THRESH_OTSU + THRESH_BINARY;   //阈值二值化+Otsu算法选择最佳阈值。
    	  }

    	  if (g_ThresholdType == 6)
    	  {
    		  if (srcImage.channels() == 3)
    			  cvtColor(srcImage, tmpImage, COLOR_BGR2GRAY);
    		  g_ThresholdType = THRESH_OTSU + THRESH_BINARY_INV;  //阈值反二值化+Otsu算法选择最佳阈值。
    	  }
    	  if (g_ThresholdType == 7)
    	  {
    		  if (srcImage.channels() == 3)
    			  cvtColor(srcImage, tmpImage, COLOR_BGR2GRAY);
    		  g_ThresholdType = THRESH_TRIANGLE + THRESH_BINARY;          //阈值二值化+使用三角算法选择最佳阈值。	 
    }
    	  if (g_ThresholdType == 8)
    	  {
    		  if (srcImage.channels() == 3)
    			  cvtColor(srcImage, tmpImage, COLOR_BGR2GRAY);
    		  g_ThresholdType = THRESH_TRIANGLE + THRESH_BINARY_INV;         //阈值二值化+使用三角算法选择最佳阈值。
    	  }
    

    // 二值化处理 threshold(tmpImage, dstImage, g_ThresholdValue, //阈值大小 255, g_ThresholdType); //阈值类型 imshow("【效果图】", dstImage); }

      

  • 相关阅读:
    C语言寒假大作战01
    C语言I作业12—学期总结
    C语言I博客作业11
    C语言I博客作业10
    C语言I博客作业09
    C语言I博客作业08
    计算机组成与设计 复习
    概率论与数理统计 期末复习
    SPM(Software Project Management)课程感想
    Software Project Management_JUnit && Maven
  • 原文地址:https://www.cnblogs.com/fcfc940503/p/11253903.html
Copyright © 2011-2022 走看看