OpenCV 4.12.0
開源計算機視覺
載入中...
搜尋中...
無匹配項
使用 inRange 的閾值操作

上一教程: 基本閾值化操作
下一教程: 製作你自己的線性濾波器!

原始作者Lorena García
相容性Rishiraj Surti

目標

在本教程中,您將學習如何

  • 使用 OpenCV cv::inRange 函式執行基本閾值化操作。
  • 根據 HSV 色彩空間中畫素值的範圍檢測物件。

理論

  • 在上一教程中,我們學習瞭如何使用 cv::threshold 函式執行閾值化操作。
  • 在本教程中,我們將學習如何使用 cv::inRange 函式實現此目的。
  • 概念保持不變,但現在我們添加了所需畫素值的範圍。

HSV 色彩空間

HSV(色相、飽和度、明度)色彩空間是一種類似於 RGB 顏色模型表示色彩空間的模型。由於色相通道對顏色型別進行建模,因此在需要根據顏色分割物件的影像處理任務中非常有用。飽和度的變化範圍從不飽和(表示灰色陰影)到完全飽和(無白色分量)。明度通道描述了顏色的亮度或強度。下圖顯示了 HSV 圓柱體。

由 SharkD 派生作品:SharkD [CC BY-SA 3.0 或 GFDL],透過維基共享資源

由於 RGB 色彩空間中的顏色是使用三個通道編碼的,因此基於顏色分割影像中的物件更加困難。

由 SharkD [GFDL 或 CC BY-SA 4.0],來自維基共享資源

使用 cv::cvtColor 函式從一個色彩空間轉換為另一個色彩空間的公式在 顏色轉換 中描述。

程式碼

解釋

讓我們檢查一下程式的總體結構

  • 從預設或提供的捕獲裝置捕獲影片流。

  • 建立一個視窗以顯示預設幀和閾值幀。

  • 建立滑動條以設定 HSV 值的範圍

  • 在使用者希望程式退出之前執行以下操作

  • 顯示影像

  • 對於控制下限範圍的滑動條,例如色相值

    static void on_low_H_thresh_trackbar(int, void *)
    {
    low_H = min(high_H-1, low_H);
    setTrackbarPos("Low H", window_detection_name, low_H);
    }
  • 對於控制上限範圍的滑動條,例如色相值

  • 有必要找到最大值和最小值,以避免閾值高值小於低值等差異。

結果

  • 編譯此程式後,執行它。程式將開啟兩個視窗
  • 當您從滑動條設定範圍值時,結果幀將在另一個視窗中可見。