ANDROID - Farberkennung mit openCV - wie?

8

Mein Ziel ist es, ein gedroschenes Bild mit dem HSV-Farbraum so darzustellen, dass nur gelbe Objekte angezeigt werden. Ich benutze diesen Code (basierend auf einem Code von den openCV 2.3.1 android Samples gegeben):

%Vor%

Die Basisklasse (Abstract) enthält die Methode "run":

%Vor%

Ich bekomme diese verzerrte Vorschau, die ich verstehe (HSV-Format), aber warum wiederholt sie sich (ich zeichne eine grüne Linie, um es zu betonen) 4 mal? und was ist die schwarze horizontale Linie? Was mache ich falsch?

eine letzte Sache, was ist die Logik dahinter:

%Vor%

warum ist es COLOR_RGB2HSV? sollte es nicht COLOR_HSV2RGB sein?

Nehmen wir an, ich habe dieses Problem bestanden. Wie kann ich ein Graustufenbild mit den gelben Objekten in ihrer ursprünglichen Farbe erstellen? Ich dachte, mit der Core.inRange () -Methode, aber wenn ich dies tue, bekomme ich einen schwarzen Bildschirm.

ja, ich schätze, ich sehe wie ein kompletter Ruck aus, aber ich muss irgendwo anfangen, nicht wahr?

10x!

Update 1: Ich habe versucht, RGB- & gt; HSV- & gt; RGB auf diese Weise zu tun:

%Vor%

und ich habe:

?

Update 2:

Ich verstehe endlich, dass vor dem Setzen eines Frames, in RGB A -Raum konvertiert werden muss. Also habe ich jetzt den Schwellenwert mit dem Code wie folgt versucht:

%Vor%

Aber jetzt gibt es mir Kraftabschaltung ... irgendwelche Ideen?

    
gor 25.02.2012, 10:56
quelle

4 Antworten

5

Ich denke mHSVThreshed ist eine binäre Matte

also vielleicht diese Zeile:

%Vor%

sollte zu:

geändert werden %Vor%

Ich habe mich auch viel mit dem Problem des Zeigens beschäftigt ...

hoffe diese Hilfe ...

    
Ethan Chen 27.02.2012, 11:26
quelle
15

Freunde. Ich gebe Ihnen das Ergebnis von 1 Monat harter Arbeit und Hilfe von Freunden über den Ozean:

Ethan hatte Recht. aber der Code musste repariert werden.

der Code:

%Vor%

Zuerst ist die Matte binär 0 oder 255, also ist die Transformation auf Graustufe "natürlicher". Zweitens ist die Umwandlung von HSV zu RGB tatsächlich HSV-BGR !!. Und das letzte ist, dass die Vorschau RGBA Bitmap erwartet.

das ist es. hoffe, dass andere von diesem Beitrag profitieren können. SHALOM!

    
gor 27.02.2012 19:58
quelle
2

Soweit ich es sehe, hole ich den Bildrahmen in RGBA und speichere ihn unter dem Namen "mHSV"

capture.retrieve(mHSV, Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA);

also solltest du es dort als mRgba speichern

in der cvtColor müssen Sie es über COLOR_RGBA2HSV in HSV umwandeln. Angenommen, Sie haben die Namen geändert:

%Vor%

Und ich nehme an, diese Wiederholung der Bilder kommt von der "4" in Ihrer cvtColor-Funktion, da Ihr HSV-Bild nur 3 Kanäle hat. Setze dort eine 0 und es sollte automatisch erkannt werden ...

Ich hoffe, es hilft ...

    
evident 25.02.2012 11:25
quelle
1

warum ist es COLOR_RGB2HSV? sollte es nicht COLOR_HSV2RGB sein?

Ich würde sagen, dass es sollte :). Sieht nach einem Problem aus, wie opencv die Pixel packt. Stellen Sie sicher, dass sowohl die Ein- als auch die Ausgabebilder die gleiche Größe und Anzahl der Kanäle haben.

Dies

%Vor%

sieht auch komisch aus, speichern Sie das RGBA-Bild, das Sie in ein Bild im HSV-Format bekommen? Das würde das Problem erklären. Versuchen Sie, etwas in der Art zu tun: RGB (capture retrieve) = & gt; HSV (cvt Farbe) = & gt; Farberkennung = & gt; RGB (cvt Farbe wieder)

    
jlengrand 25.02.2012 11:19
quelle

Tags und Links