title: OpenCV 2.3: Convert Mat to RGBA pixel array
body: <p>I am attempting to use OpenCV to grab frames from a webcam and display them in a window using SFML.</p>
  
  <p>VideoCapture returns frames in OpenCV's Mat format. To display the frames, SFML requires a 1D array of pixels in its uint8 format, which (as far as I can tell) is interchangeable with uchar. This array is expected to represent 32 bits per pixel RGBA.</p>
  
  <p>So, I have a uchar array, and I'm looping over the Mat data and copying each pixel:</p>
  
  <pre><code>VideoCapture cap(0);
  Mat frame;
  cap &gt;&gt; frame;
  
  uchar* camData = new uchar[640*480*4];
  uchar* pixelPtr = frame.data;
  for(int i = 0; i &lt; frame.rows; i++)
  {
      for(int j = 0; j &lt; 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></pre>
  
  <p>Unfortunately, this doesn't quite work. Something in that loop is wrong, as the resulting image when I load and display camData is scrambled.</p>
  
  <p>As far as I can discern, either my math in the loop is wrong so the pixels are being assigned wrong, or the Mat data is in some format other than BGR.</p>
  
  <p>Any ideas?</p>