Auswahl der korrekten oberen und unteren HSV-Grenzen für die Farberkennung mit `cv :: inRange` (OpenCV)

Ich habe ein Bild von einer Kaffeedose mit einem orangefarbenen Deckel, dessen Position ich finden möchte. Hier ist es.

Das Dienstprogramm gcolor2 zeigt HSV in der Mitte des Deckels als (22, 59, 100) an. Die Frage ist, wie man dann die Grenzen der Farbe wählt. Ich habe versucht, min = (18, 40, 90) und max = (27, 255, 255), habe aber unerwartet

Hier ist der Python-Code:

import cv

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

ORANGE_MIN = cv.Scalar(18, 40, 90)
ORANGE_MAX = cv.Scalar(27, 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_RGB2HSV)
    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()

Antworten auf die Frage(5)

Ihre Antwort auf die Frage