OpenCV 2.3: Convertir Mat a matriz de píxeles RGBA

Estoy intentando usar OpenCV para capturar fotogramas de una cámara web y mostrarlos en una ventana usando SFML.

VideoCapture devuelve cuadros en formato Mat de OpenCV. Para mostrar los cuadros, SFML requiere una matriz 1D de píxeles en su formato uint8, que (por lo que puedo decir) es intercambiable con uchar. Se espera que esta matriz represente 32 bits por píxel RGBA.

Entonces, tengo una matriz de uchar, y estoy haciendo un bucle sobre los datos de la Mat y copiando cada píxel:

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

Desafortunadamente, esto no funciona del todo. Algo en ese bucle es incorrecto, ya que la imagen resultante cuando se carga y muestra camData está codificada.

Hasta donde puedo discernir, o bien mi matemática en el bucle es incorrecta por lo que los píxeles se asignan incorrectamente, o los datos de Mat están en otro formato que no sea BGR.

¿Algunas ideas?

Respuestas a la pregunta(3)

Su respuesta a la pregunta