img = self.screen.grabWindow(hwnd).toImage() 使用 cv2 保存为BMP
时间: 2024-03-22 15:37:45 浏览: 18
你可以使用 OpenCV 的 `imwrite()` 函数将图像保存为 BMP 格式。以下是一个示例代码:
```python
import cv2
from PyQt5.QtGui import QWindow, QScreen, QPixmap
# 获取窗口句柄和屏幕对象
hwnd = window.winId()
screen = QGuiApplication.primaryScreen()
# 获取窗口图像
img = screen.grabWindow(hwnd).toImage()
# 将图像转换为 OpenCV 格式
cv_img = cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR)
# 保存为 BMP 格式
cv2.imwrite("image.bmp", cv_img)
```
在这个示例中,我们首先使用 `QGuiApplication.primaryScreen()` 函数获取系统主屏幕对象。然后,我们使用 `screen.grabWindow(hwnd).toImage()` 函数获取窗口图像,并将其转换为 OpenCV 格式。最后,我们使用 `cv2.imwrite()` 函数将图像保存为 BMP 格式。
请注意,你需要先安装 OpenCV 库才能使用上述代码。你可以使用以下命令在终端中安装 OpenCV:
```
pip install opencv-python
```
相关问题
img = fangfalei.screen.grabWindow(hwnd).toImage() 如何用cv2 打开
可以使用PIL库将Qt的QImage转换为numpy数组,然后再使用cv2打开。具体实现代码如下:
```python
import cv2
from PIL import Image
# 假设img为Qt的QImage对象
img = fangfalei.screen.grabWindow(hwnd).toImage()
# 将QImage转换为numpy数组
buffer = img.bits().asstring(img.width() * img.height() * 4)
image = np.frombuffer(buffer, dtype=np.uint8).reshape((img.height(), img.width(), 4))
image = image[:, :, :3] # 去除alpha通道
# 将numpy数组转换为PIL Image对象
pil_image = Image.fromarray(image)
# 使用cv2打开PIL Image对象
cv2_image = cv2.cvtColor(np.asarray(pil_image), cv2.COLOR_RGB2BGR)
cv2.imshow('image', cv2_image)
cv2.waitKey(0)
```
img = fangfalei.screen.grabWindow(hwnd).toImage() 使用CV2 打开
可以使用OpenCV库中的cv2.cvtColor()函数将QImage类型的img转换为OpenCV中的numpy数组,示例代码如下:
```
import cv2
import numpy as np
# 将QImage类型的img转换为OpenCV中的numpy数组
img_np = np.array(img.convertToFormat(QtGui.QImage.Format_RGB888))
img_np = img_np.reshape((img.height(), img.width(), 3))
img_np = cv2.cvtColor(img_np, cv2.COLOR_BGR2RGB)
```
其中,将QImage类型转换为numpy数组的代码为:
```
img_np = np.array(img.convertToFormat(QtGui.QImage.Format_RGB888))
```
将numpy数组中的BGR颜色通道转换为RGB颜色通道的代码为:
```
img_np = cv2.cvtColor(img_np, cv2.COLOR_BGR2RGB)
```
请注意,代码中的QtGui.QImage.Format_RGB888格式可能需要根据你的实际情况进行修改。