ANDROID - Farbe-Erkennung mit openCV - aber wie?

mein Ziel ist die Anzeige eines drosch Bild mit dem HSV-Farbraum in einer Weise, dass nur gelbe Objekte angezeigt. ich benutze diesen code (basierend auf einem code-gegeben durch die openCV-2.3.1 android-Proben):

protected Bitmap processFrame(VideoCapture capture) {
    //capture.retrieve(mGray, Highgui.CV_CAP_ANDROID_GREY_FRAME);
    //Imgproc.cvtColor(mGray, mRgba, Imgproc.COLOR_GRAY2RGBA, 4);

    capture.retrieve(mHSV, Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA);
    Imgproc.cvtColor(mHSV, mRgba, Imgproc.COLOR_RGB2HSV, 4);
    //Core.inRange(mRgba, new Scalar(20, 100, 100), new Scalar(30, 255, 255), mRgba);

    Bitmap bmp = Bitmap.createBitmap(mRgba.cols(), mRgba.rows(), Bitmap.Config.ARGB_8888);

    if (Utils.matToBitmap(mRgba, bmp))
        return bmp;

    bmp.recycle();
    return null;
}

Basis (Abstrakte)Klasse, enthält die "run" - Methode:

protected abstract Bitmap processFrame(VideoCapture capture);

public void run() {
...
bmp = processFrame(mCamera);
...
canvas.drawBitmap(bmp, (canvas.getWidth() - bmp.getWidth()) / 2, (canvas.getHeight() - bmp.getHeight()) / 2, null);
...
}

bekomme ich dieses verzerrte Vorschau, die ich denke, ich kann verstehen (HSV-format), aber warum ist es, sich zu wiederholen (i ' V zeichnen Sie eine grüne Linie zu betonen, es) 4 mal? und was ist die schwarze horizontale Linie?
ANDROID - Farbe-Erkennung mit openCV - aber wie?
was mache ich falsch?

eine Letzte Sache, was ist die Logik hinter:

Imgproc.cvtColor(mHSV, mRgba, Imgproc.COLOR_RGB2HSV, 4);

warum ist es COLOR_RGB2HSV? sollte es COLOR_HSV2RGB?

Lassen Sie s sagen ich ' V übergeben dieses problem, wie kann ich eine Grau-Bild mit dem gelben Objekte in Ihrer nativen Farbe? ich dachte, mit dem Kern.inRange () - Methode, aber wenn ich das mache bekomme ich schwarzen Bildschirm.

ja, ich denke, ich sehe aus wie ein Gesamt Ruck, aber ich brauche zum starten von irgendwo, nicht ich?

10x!

Update 1:
ich habe versucht zu tun, RGB->HSV->RGB auf diese Weise:

 @Override
protected Bitmap processFrame(VideoCapture capture) {
    //capture.retrieve(mGray, Highgui.CV_CAP_ANDROID_GREY_FRAME);
    //Imgproc.cvtColor(mGray, mRgba, Imgproc.COLOR_GRAY2RGBA, 4);

    capture.retrieve(mRgba, Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGB);
    Imgproc.cvtColor(mRgba, mHSV, Imgproc.COLOR_RGB2HSV,0);
    //Imgproc.cvtColor(mRgba, mRgba, Imgproc.COLOR_BGR2RGB, 4);
    //Core.inRange(mRgba, new Scalar(20, 100, 100), new Scalar(30, 255, 255), mRgba);
    Imgproc.cvtColor(mHSV,mRgba , Imgproc.COLOR_HSV2RGB,0);

    Bitmap bmp = Bitmap.createBitmap(mRgba.cols(), mRgba.rows(), Bitmap.Config.ARGB_8888);

    if (Utils.matToBitmap(mRgba, bmp))
        return bmp;

    bmp.recycle();
    return null;
}

und ich bekam:
ANDROID - Farbe-Erkennung mit openCV - aber wie?

?

Update 2:

ich endlich verstehen, dass vor der Festlegung eines Rahmens, muss es umgewandelt werden in RGB - Eine Raum.
so habe ich nun versucht, die Schwelle mit dem code wie folgt:

capture.retrieve(mRgba, Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA);
    Imgproc.cvtColor(mRgba, mHSV, Imgproc.COLOR_RGB2HSV,0);
    Core.inRange(mHSV, new Scalar(20, 100, 100), new Scalar(30, 255, 255), mHSVThreshed);
    Imgproc.cvtColor(mHSVThreshed, mRgba, Imgproc.COLOR_HSV2RGB, 0);
    Imgproc.cvtColor(mRgba, mRgba, Imgproc.COLOR_RGB2RGBA, 0);
    Bitmap bmp = Bitmap.createBitmap(mRgba.cols(), mRgba.rows(), Bitmap.Config.ARGB_8888);

aber jetzt gibt es mir Kraft, shutdown... irgendwelche Ideen?

  • Ich weiß, das ist einige Zeit her und es ist nicht die richtige Art zu Fragen - aber hast du schon eine Anleitung dafür? wie kann ich nicht bekommen, der Videoergreifung arbeiten ich würde mich freuen, wenn Sie bieten könnte, Ihren code oder Teile des Codes auf github. Großen Dank
  • Heyho. Ichm really sorry but it has been a while since iv arbeitete mit openCV, Plus ich habe nicht den code mehr. Ich rate dir, schau mal hier: docs.opencv.org/doc/tutorials/highgui/video-write/.... Viel Glück, harte Arbeit zahlt sich irgendwann 🙂
InformationsquelleAutor gor | 2012-02-25
Schreibe einen Kommentar