¿Cómo capturar el escritorio en OpenCV (es decir, convertir un mapa de bits en un Mat)?

Quiero usar OpenCV para procesar mi escritorio como si fuera un flujo de video.
Estoy familiarizado con OpenCV.
No estoy familiarizado con la API de Windows. Me doy cuenta de que hay otras formas de capturar la pantalla, pero para los fines de mi pregunta, necesito que se haga con OpenCV.

Aquí está mi código (super ingenuo):

HWND hDesktopWnd;
HDC hDesktopDC;
hDesktopWnd=GetDesktopWindow();
hDesktopDC=GetDC(hDesktopWnd);

// get the height and width of the screen
int height = GetSystemMetrics(SM_CYVIRTUALSCREEN);
int width = GetSystemMetrics(SM_CXVIRTUALSCREEN);

// create a bitmap
HBITMAP hbDesktop = CreateCompatibleBitmap( hDesktopDC, width, height);

Mat src(height,width,CV_8UC4);
src.data = (uchar*)hbDesktop;

imshow("output",src);  //fails :(

Hay preguntas similares en StackOverflow, pero son para OpenCV de estilo antiguo o para el sistema operativo Android.
Estoy en windows 7 64x
Opencv 2.4.3

Gracias a cualquiera que pueda responder a esta pregunta.

Respuestas a la pregunta(2)

Su respuesta a la pregunta