首頁 > 後端開發 > Python教學 > 如何在 OpenCV 中選擇正確的 HSV 上邊界和下邊界以進行準確的顏色檢測?

如何在 OpenCV 中選擇正確的 HSV 上邊界和下邊界以進行準確的顏色檢測?

Mary-Kate Olsen
發布: 2024-12-02 01:36:10
原創
835 人瀏覽過

How to Choose the Correct HSV Upper and Lower Boundaries for Accurate Color Detection in OpenCV?

使用cv::inRange (OpenCV) 選擇正確的HSV 上下邊界進行顏色檢測

使用OpenCV 中的cv::inRange 函數::inRange 函數,為HSV 選擇適當的上下邊界(Hue、飽和度、值)色彩空間。這可確保準確的顏色檢測並實現高效的分割。

問題:

考慮一張咖啡罐上包含橘色蓋子的圖像。使用 gcolor2 公用程式所獲得的蓋子中心的 HSV 值為 (22, 59, 100)。使用定義為 min = (18, 40, 90) 和 max = (27, 255, 255) 的初始邊界會導致意外的偵測結果。

解決方案:

問題1:HSV範圍變化

不同的應用程式通常對HSV 值使用不同的比例。例如,GIMP採用H:0-360,S:0-100,V:0-100的範圍,而OpenCV使用H:0-179,S:0-255,V:0-255。在這種情況下,GIMP 中的色調值為 22,應將其值的一半轉換為 OpenCV 中的 11。因此,修改後的邊界變為 (5, 50, 50) - (15, 255, 255)。

問題 2:顏色空間相容性

OpenCV 採用 BGR (藍色-綠色-紅色)顏色格式,而非 RGB。為了確保兼容性,將RGB 轉換為HSV 的代碼應修改為:

cv.CvtColor(frame, frameHSV, cv.CV_BGR2HSV)
登入後複製

更新代碼:

import cv

in_image = 'kaffee.png'
out_image = 'kaffee_out.png'
out_image_thr = 'kaffee_thr.png'

ORANGE_MIN = cv.Scalar(5, 50, 50)
ORANGE_MAX = cv.Scalar(15, 255, 255)
COLOR_MIN = ORANGE_MIN
COLOR_MAX = ORANGE_MAX

def test1():
    frame = cv.LoadImage(in_image)
    frameHSV = cv.CreateImage(cv.GetSize(frame), 8, 3)
    cv.CvtColor(frame, frameHSV, cv.CV_BGR2HSV)
    frame_threshed = cv.CreateImage(cv.GetSize(frameHSV), 8, 1)
    cv.InRangeS(frameHSV, COLOR_MIN, COLOR_MAX, frame_threshed)
    cv.SaveImage(out_image_thr, frame_threshed)

if __name__ == '__main__':
    test1()
登入後複製

結果:

運行更新後的程式碼可以對橙色進行更準確的分割蓋子。

注意:

由於背景色調相似,可能會出現一些小的錯誤偵測。為了解決這個問題,可以應用輪廓分析等進一步處理來隔離與蓋子相對應的最大輪廓。

以上是如何在 OpenCV 中選擇正確的 HSV 上邊界和下邊界以進行準確的顏色檢測?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板