ANDROID - couleur de la détection à l'aide d'openCV - comment?

mon objectif est d'afficher une battues image en utilisant l'espace de couleur HSV en sorte que seuls les objets jaunes seront affichés. j'ai utiliser ce code (basé sur un code donné par le openCV 2.3.1 android échantillons):

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;
}

la base (Résumé)classe contient le "run" de la méthode:

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);
...
}

- je obtenir ce déformée aperçu que je pense que je peux comprendre (HSV format) mais pourquoi est-il de se répéter (j'ai réussit à tracer une ligne verte pour le souligner) 4 temps? et qu'est-ce que la ligne horizontale noire?
ANDROID - couleur de la détection à l'aide d'openCV - comment?
ce que je fais mal?

une dernière chose, quelle est la logique derrière:

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

pourquoi est-il COLOR_RGB2HSV? il ne faut pas être COLOR_HSV2RGB?

Disons que je v passé ce problème, comment puis-je faire une image en niveau de gris avec du jaune d'objets dans leur propre couleur? j'ai pensé à l'aide de la Base.inRange() la méthode mais lorsque je fais ceci, j'obtiens un écran noir.

oui, je suppose que je regarde comme un idiot, mais j'ai besoin de commencer quelque part, n'est-ce pas?

10x!

Mise à jour 1:
j'ai essayé de faire RVB->HSV->RVB de cette façon:

 @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;
}

et j'ai obtenu:
ANDROID - couleur de la détection à l'aide d'openCV - comment?

?

Mise à jour 2:

je comprends enfin que, avant l'établissement d'un cadre, il doit être converti en RVBUN de l'espace.
alors j'ai essayé aujourd'hui le seuil avec le code comme suit:

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

mais maintenant, il me donne la force d'arrêt... des idées?

Je sais que c'est il y a quelques temps et ce n'est pas la bonne façon de demander - mais avez-vous fait un tuto pour cela? comme je ne peux pas obtenir la VideoCapture de travail, je serais heureux si vous pouvez fournir votre code - ou des parties de votre code sur github. Un Grand Merci
Hé là-bas. Jem really sorry but it has been a while since iv travaillé avec openCV, Plus je n'ai pas le code plus. Je vous conseille de regarder ici: docs.opencv.org/doc/tutorials/highgui/video-write/.... Bonne chance, le travail acharné porte finalement 🙂

OriginalL'auteur gor | 2012-02-25