convertir bgr à hsv dans opencv, C++

J'essaie d'avoir une webcam prendre en photo le visage de quelqu'un dans BGR, convertir l'image en VHS, et d'analyser ces HSV valeurs qui seront utilisés par la suite dans une peau algorithme de détection. Malheureusement, la situation semble être analysé dans le BGR, même après que j'ai essayer de le convertir en utilisant cvtColor().

J'utilise le code ci-dessous pour tester si oui ou non je suis en utilisant le droit de l'espace couleur. Remarque la partie où j'ai essayer de régler la saturation et la valeur à 0:

Mat faceROI = findFace(first); //basic Mat, region of interest for face (code not included)

Mat temp;
faceROI.convertTo(temp, CV_8UC3); //making sure this has right no. of channels and such

CvScalar s;

IplImage face_ipl = temp; //new header
IplImage* aNew = cvCreateImage(cvGetSize(&face_ipl), face_ipl.depth, 3);

cvCvtColor(&face_ipl, aNew, CV_BGR2HSV);

for(int x = 0; x < faceROI.cols; x++){
    for (int y = 0; y < faceROI.rows; y++){
        s = cvGet2D(aNew, x, y);

        //vvvvvvvvvvv
        s.val[1] = 0; //should be saturation
        s.val[2] = 0; //should be value
        //^^^^^^^^^^^

        cvSet2D(aNew, x, y, s);
    }
}

Mat again(aNew); //<--- is this where something is set back to BGR?
imshow("white", again);

cvReleaseImage(&aNew);

Ce produit complètement bleu de photo de mon visage, il semble donc aime je suis en train de modifier le G et R les canaux d'un BGR image, au lieu de S et V voies d'un HSV image. (Je voudrais afficher l'image, mais c'est mon premier post donc je n'ai pas assez de réputation).

Quelqu'un sait pourquoi ce qui se passe? Tout et toutes les pensées sont appréciés.

Alors, où êtes-vous convertir l'image en arrière de HSV BGR?
C'est le cœur de ma question...je ne pense pas que jamais je ne reconvertir BGR, mais les résultats semblent indiquer que c'est ce qu'il se passe.
Peu importe ce que l'espace colorimétrique de l'image, la imshow fonction sera toujours interpréter l'image comme un simple RVB ou BGR image. Comme vous l'affectation d' 0 de la S et V canaux, seuls les H canal reste qui correspond à B dans un BGR image. Donc, pour imshow, again est un BGR image avec des valeurs uniquement dans le canal bleu. C'est pourquoi vous voyez bleu de sortie.
Solution de contournement------> ajouter cvtColor(again,again,CV_HSV2BGR) avant imshow.
Votre solution de contournement suggestion vraiment aidé - il m'a donné les résultats escomptés. (J'ai changé la valeur de paramètre à 255 et gardé de la saturation à 0; mon code avec votre suggestion de produit de un pur, blanc, fenêtre, ce qui est logique.) Merci pour votre aide!

OriginalL'auteur Connor | 2013-06-17