OpenCV-C++ 圖像自適應閾值二值化處理adaptiveThreshold


API介紹

這篇文章主要介紹有關adaptiveThreshold的使用方式;

首先,來看一下調用格式;

void adaptiveThreshold( InputArray src, OutputArray dst,
                       double maxValue, int adaptiveMethod,
                       int thresholdType, int blockSize, double C );
  • src表示需要進行二值化的圖像;需要注意的是,該輸入必須是8-bit單通道的圖像;
  • dst表示輸出圖像的二值圖像;
  • maxValue是一個非零值,用於對哪些滿足條件的閾值進行賦值;
  • adaptiveMethod表示選擇哪一種自適應閾值算法;Opencv提供兩種,ADAPTIVE_THRESH_MEAN_CADAPTIVE_THRESH_GAUSSIAN_C,下面會詳細介紹;
  • thresholdType表示二值化類型,OpenCV提供兩種, THRESH_BINARYTHRESH_BINARY_INV,下面會詳細介紹;
  • blocksize表示參與計算的像素的領域范圍,必須使用奇數;
  • C可以為正數, 零或者負數;用於在計算過程中容忍程度;

thresholdType介紹

OpenCV在adaptiveThreshold方法中允許使用兩種ThresholdTypes,畢竟是進行二值化處理;分別為:

  • THRESH_BINARY
  • THRESH_BINARY_INV

計算方式如下:

其中,\(src(x, y)\)表示原始灰度圖像灰度值,\(T(x, y)\)是根據自適應閾值算法計算得到;計算的方式來自於adaptiveMethod;

adaptiveMethod介紹

OpenCV提供兩種自適應閾值算法:

  • ADAPTIVE_THRESH_MEAN_C
  • ADAPTIVE_THRESH_GAUSSIAN_C

其中,第一種ADAPTIVE_THRESH_MEAN_C,針對像素\((x, y)\)的計算方式如下:

  • \(T(x, y)\)結果是\((x, y)\)的鄰域\(blockSize \times blockSize\)范圍內所有灰度值的均值減去\(C\);

第二種ADAPTIVE_THRESH_GAUSSIAN_C,針對像素\((x, y)\)的計算方式如下:

  • 首先,生成一個大小為\(blockSize \times blockSize\)的高斯核,作為權重;
  • 其次,利用高斯核與\((x, y)\)鄰域范圍內灰度值,進行加權求和,再減去\(C\),得到\(T(x, y)\);

示例:

#include <iostream>
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

/**
 * adaptiveThreshold的使用
*/

int main(){
    // 讀取圖像
    Mat src = imread("/home/chen/dataset/lena.jpg");
    if (! src.data){
        cout << "could not load image." << endl;
        return -1;
    }
    namedWindow("src", WINDOW_AUTOSIZE);
    imshow("src", src);

    // 轉成灰度圖
    Mat srcGray;
    cvtColor(src, srcGray, COLOR_BGR2GRAY);
    namedWindow("srcGray", WINDOW_AUTOSIZE);
    imshow("srcGray", srcGray);

    // 自適應閾值二值化
    Mat srcBinary;
    adaptiveThreshold(~srcGray, srcBinary, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 11, -2);
    namedWindow("srcBinary", WINDOW_AUTOSIZE);
    imshow("srcBinary", srcBinary);

    waitKey(0);
    return 0;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM