img = self.screen.grabWindow(hwnd).toImage() 使用 cv2 保存为BMP
时间: 2024-03-22 21:37:45 浏览: 54
你可以使用 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() buffer = QBuffer() buffer.open(QBuffer.ReadWrite) img.save(buffer,"bmp") dd = Image.open(buffer) 中dd 怎么直接用cv2打开
你可以在将 PIL 图像转换为 OpenCV 图像时直接使用 `cv2.imdecode` 函数,这样就不需要先保存为 BMP 文件了。以下是代码示例:
```python
import numpy as np
import cv2
from PIL import Image
from PyQt5.QtGui import QBuffer
# 截取窗口图像并将其转换为 OpenCV 图像
img = fangfalei.screen.grabWindow(hwnd).toImage()
buffer = QBuffer()
buffer.open(QBuffer.ReadWrite)
img.save(buffer, "bmp")
buffer.seek(0)
data = np.frombuffer(buffer.data(), dtype=np.uint8)
dd = cv2.imdecode(data, cv2.IMREAD_COLOR)
dd = cv2.cvtColor(dd, cv2.COLOR_BGR2RGB) # 转换为 RGB 格式
```
注意,在使用 `cv2.imdecode` 函数时,需要将 `QBuffer` 的数据转换为 numpy 数组。
def jietu(hwnd): img = fangfalei.screen.grabWindow(hwnd).toImage() buffer = QBuffer() buffer.open(QBuffer.ReadWrite) img.save(buffer,"bmp") dd = Image.open(buffer) dd.save("1.bmp") 将数据提出 进行 对比
这段代码中,`jietu`函数的作用是截取窗口中的图像,并将其保存为`bmp`格式的图像文件。具体实现方式是使用`fangfalei.screen.grabWindow`函数截取窗口图像并将其转换为`QImage`格式,然后将`QImage`对象保存到`QBuffer`对象中,并最终使用`Image`模块打开`QBuffer`对象中的数据并保存为`bmp`格式图像文件。如果您想要对比两张图片,可以使用Python中的`PIL`库,打开两张图片并使用`ImageChops`模块中的函数进行对比。例如:
```python
from PIL import Image, ImageChops
img1 = Image.open("1.bmp")
img2 = Image.open("2.bmp")
diff = ImageChops.difference(img1, img2)
if diff.getbbox():
print("The images are different.")
else:
print("The images are the same.")
```
其中`getbbox`函数用于获取两张图片中不同的部分的坐标,如果两张图片相同,则返回`None`。
阅读全文