【问题标题】:How to threshold an image in OpenCV?如何在 OpenCV 中对图像进行阈值处理?
【发布时间】:2019-07-08 18:41:30
【问题描述】:

我在 OpenCV 中有一个表示掩码的二进制图像。这个蒙版有一定程度的几何噪声,我想平滑,所以我使用模糊来实现这个效果。

现在我有一个灰度图像。我想将高于某个阈值的所有像素设为白色,而所有其他像素必须变为黑色。

在 opencv 中是否有一种简单的方法可以做到这一点?

【问题讨论】:

    标签: c++ opencv image-processing


    【解决方案1】:

    是的,有:

    ret,thresh1 = cv.threshold(img,127,255,cv.THRESH_BINARY)
    

    我来自this link

    在 C++ 上,我们有

    threshold( src_gray, dst, threshold_value, max_BINARY_value,threshold_type );
    

    Here if you want further information

    上一个链接的完整代码(C++ 教程)

    #include "opencv2/imgproc/imgproc.hpp"
    #include "opencv2/highgui/highgui.hpp"
    #include <stdlib.h>
    #include <stdio.h>
    
    using namespace cv;
    
    /// Global variables
    
    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";
    
    /// Function headers
    void Threshold_Demo( int, void* );
    
    /**
     * @function main
     */
    int main( int argc, char** argv )
    {
      /// Load an image
      src = imread( argv[1], 1 );
    
      /// Convert the image to Gray
      cvtColor( src, src_gray, CV_BGR2GRAY );
    
      /// Create a window to display results
      namedWindow( window_name, CV_WINDOW_AUTOSIZE );
    
      /// Create Trackbar to choose type of Threshold
      createTrackbar( trackbar_type,
                      window_name, &threshold_type,
                      max_type, Threshold_Demo );
    
      createTrackbar( trackbar_value,
                      window_name, &threshold_value,
                      max_value, Threshold_Demo );
    
      /// Call the function to initialize
      Threshold_Demo( 0, 0 );
    
      /// Wait until user finishes program
      while(true)
      {
        int c;
        c = waitKey( 20 );
        if( (char)c == 27 )
          { break; }
       }
    
    }
    
    
    /**
     * @function Threshold_Demo
     */
    void Threshold_Demo( int, void* )
    {
      /* 0: Binary
         1: Binary Inverted
         2: Threshold Truncated
         3: Threshold to Zero
         4: Threshold to Zero Inverted
       */
    
      threshold( src_gray, dst, threshold_value, max_BINARY_value,threshold_type );
    
      imshow( window_name, dst );
    }
    

    【讨论】:

      猜你喜欢
      • 2014-11-30
      • 2020-07-05
      • 2015-10-19
      • 2021-12-23
      • 2021-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多