OpenCV 2.3 :Преобразование мата в массив пикселей RGBA

Я пытаюсь использовать OpenCV для захвата кадров с веб-камеры и отображения их в окне с помощью SFML.

VideoCapture возвращает кадры в формате Mat OpenCV. Для отображения кадров SFML требуется одномерный массив пикселей в формате uint8, который (, насколько я могу судить ), взаимозаменяем с uchar. Ожидается, что этот массив будет представлять 32 бита на пиксель RGBA.

Итак, у меня есть массив uchar, и я перебираю данные Mat и копирую каждый пиксель.:

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

К сожалению, это не совсем работает. Что-то в этом цикле не так, так как результирующее изображение, когда я загружаю и отображаю camData, зашифровано.

Насколько я могу судить, либо моя математика в цикле неверна, поэтому пиксели назначаются неправильно, либо данные Mat представлены в каком-то формате, отличном от BGR.

Есть идеи?

7
задан Thew 22 April 2012 в 04:02
поделиться