title: How to optimize conversion from PyCBitmap to OpenCV image
body: <p>I've got this bit of code, and it works... But it runs very slow:</p>
  
  <pre><code>hwin = win32gui.GetDesktopWindow()
  width = win32api.GetSystemMetrics(win32con.SM_CXVIRTUALSCREEN)
  height = win32api.GetSystemMetrics(win32con.SM_CYVIRTUALSCREEN)
  left = win32api.GetSystemMetrics(win32con.SM_XVIRTUALSCREEN)
  top = win32api.GetSystemMetrics(win32con.SM_YVIRTUALSCREEN)
  hwindc = win32gui.GetWindowDC(hwin)
  srcdc = win32ui.CreateDCFromHandle(hwindc)
  memdc = srcdc.CreateCompatibleDC()
  bmp = win32ui.CreateBitmap()
  bmp.CreateCompatibleBitmap(srcdc, width, height)
  memdc.SelectObject(bmp)
  memdc.BitBlt((0, 0), (width, height), srcdc, (left, top), win32con.SRCCOPY)
  
  signedIntsArray = bmp.GetBitmapBits(False)
  img = np.array(signedIntsArray).astype(dtype="uint8") # This is REALLY slow!
  img.shape = (height,width,4)
  
  srcdc.DeleteDC()
  memdc.DeleteDC()
  win32gui.ReleaseDC(hwin, hwindc)
  win32gui.DeleteObject(bmp.GetHandle())
  
  return cv2.cvtColor(img, cv2.COLOR_RGBA2RGB)
  </code></pre>
  
  <p>This code grabs the entire windows desktop (both displays) and converts it to an OpenCV image that I use later. I believe this conversion is running slower than it could, if it was reworked a little. Specifically, the np.array(signedIntsArray) call is really slow!</p>
  
  <p>Any thoughts on how to be a bit faster at converting a desktop capture into an OpenCV image?</p>