OpenCV 2.3: Konwertuj matę na tablicę pikseli RGBA

Próbuję użyć OpenCV do pobierania ramek z kamery internetowej i wyświetlania ich w oknie przy użyciu SFML.

VideoCapture zwraca ramki w formacie Mat OpenCV. Aby wyświetlić ramki, SFML wymaga tablicy pikseli 1D w formacie uint8, która (o ile wiem) jest wymienna z ucharem. Ta tablica ma reprezentować 32 bity na piksel RGBA.

Mam więc tablicę uchar i zapętlam dane Mat i kopiuję każdy piksel:

<code>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
</code>

Niestety, to nie działa. Coś w tej pętli jest błędne, ponieważ wynikowy obraz po załadowaniu i wyświetleniu camData jest zaszyfrowany.

O ile mogę zauważyć, albo moja matematyka w pętli jest błędna, więc piksele są przypisywane źle, albo dane Mat są w innym formacie niż BGR.

Jakieś pomysły?

questionAnswers(3)

yourAnswerToTheQuestion