OpenCV 2.3: Convertir Tapis à LED de pixel de la matrice de

Je suis d'essayer d'utiliser OpenCV pour acquérir des images à partir d'une webcam et de les afficher dans une fenêtre à l'aide de la SFML.

VideoCapture renvoie les images dans OpenCV Mat format. Pour afficher les images, SFML nécessite un 1D tableau de pixels dans son uint8 format, qui (comme ce que j'en dis) est interchangeable avec le char. Ce tableau devrait représenter 32 bits par pixel RGBA.

Donc, j'ai un tableau de char, et je suis en boucle sur le Tapis de données et la copie de chaque pixel:

VideoCapture cap(0);
Mat frame;
cap >> frame;

uchar* camData = new uchar[640*480*4];
uchar* pixelPtr = frame.data;
for(int i = 0; i < frame.rows; i++)
{
    for(int j = 0; j < frame.cols; j++)
    {
        camData[i*frame.cols + j + 2] = pixelPtr[i*frame.cols + j + 0]; //B
        camData[i*frame.cols + j + 1] = pixelPtr[i*frame.cols + j + 1]; //G
        camData[i*frame.cols + j + 0] = pixelPtr[i*frame.cols + j + 2]; //R
        camData[i*frame.cols + j + 3] = 255;

    }
}
img.LoadFromPixels(640, 480, camData); //Load pixels into SFML Image object for display

Malheureusement, cela ne fonctionne pas. Quelque chose dans cette boucle qui est faux, comme l'image qui en résulte, lorsque je charge et d'affichage camData est brouillé.

Aussi loin que je puisse discerner, soit mes calculs dans la boucle est faux de sorte que les pixels sont assignés mal, ou le Tapis de données est dans un format autre que BGR.

Des idées?

Que voulez-vous dire exactement par brouillés? Pourriez-vous publier un exemple de l'image qui en résulte?
Exemple. Les données de pixels de l'image source n'est pas de finir dans les emplacements corrects dans le tableau de destination, donc ça fait bizarre de l'entrelacement des modèles.
juste eu le même motif, même après l'extraction de données de retour de la gpu/opencl et l'immersion dans un fichier 😀

OriginalL'auteur Thew | 2012-04-22