如何优化从PyCBitmap到OpenCV imag的转换

2024-09-24 22:28:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一点代码。。。但它运行得非常慢:

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)

这段代码捕获整个windows桌面(两个都显示),并将其转换为稍后我使用的OpenCV图像。我相信这种转换比它能运行的慢,如果它被重新加工一点。具体来说np.数组(签名)呼叫非常慢!在

对于如何更快地将桌面捕获转换为OpenCV图像有什么想法?在


Tags: 代码imgwidthleftsmheightwin32guibmp
1条回答
网友
1楼 · 发布于 2024-09-24 22:28:28

第一次使用Python。我想我现在对数据结构有了更好的理解。以下是大幅提高性能的修复方法:

更改:

signedIntsArray = bmp.GetBitmapBits(False)
img = np.array(signedIntsArray).astype(dtype="uint8")

收件人:

^{pr2}$

速度大大提高了!在

这是因为np库从字符串创建数组比从元组创建数组要快得多。在

相关问题 更多 >