Elegir los límites HSV superiores e inferiores correctos para la detección de color con `cv :: inRange` (OpenCV)

Tengo una imagen de una lata de café con una posición de tapa naranja que quiero encontrar. Aquí es.

La utilidad gcolor2 muestra que el VHS en el centro de la tapa es (22, 59, 100). La pregunta es ¿cómo elegir los límites del color entonces? Intenté min = (18, 40, 90) y max = (27, 255, 255), pero tengo inesperado

Aquí está el código de Python:

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()

Respuestas a la pregunta(5)

Su respuesta a la pregunta