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?
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 ...
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!
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 ...
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)