我试图捕获OpenGL应用程序(特别是MEmu)的像素,然后将其转换为OpenCV Mat。我使用this post中的hwnd2mat()
函数作为参考,但遇到了一些问题。
仅捕获窗口框架,如下所示:
进一步调查让我相信问题在于StretchBlt
(或BitBlt
)无法捕获OpenGL像素。
我尝试使用glReadPixels
(并使用this转换为Mat),但它没有读取任何像素。 wglCreateContext
返回NULL
,可能是因为我的应用程序不拥有MEmu的DC。因此,wglMakeCurrent
不执行任何操作,并且不会读取像素。
我能够创建一个解决方法修改版本的hwnd2mat
,它获取了MEmu的hwnd的WindowRect,但后来使用GetDC(NULL)
仅捕获了MEmu所在的屏幕部分。这可以工作,但任何登上MEmu的窗户都会被捕获。
我可以使用它,当然,但是想知道是否有一种方法可以在我不拥有的窗口上使用glReadPixels,或者确保hwnd2mat能够处理正在使用的窗口内容的方法的OpenGL。