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