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") 将数据提出 进行 对比
时间: 2024-03-09 08:44:14 浏览: 152
这段代码中,`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`。
相关问题
app = QApplication(sys.argv) screen = QApplication.primaryScreen() def jietu(self, hwnd): img = self.screen.grabWindow(hwnd).toImage() buffer = QBuffer() buffer.open(QBuffer.ReadWrite) img.save(buffer,"bmp") dd = Image.open(buffer) #dd.save("1.bmp") return dd def remove_colors_except(image, target_colors, threshold): result = np.zeros_like(image) for target_color in target_colors: #例如 target_colors = ['FF0000', '00FF00', '0000FF'] # 将目标色格式 "FFFFFF" 转换成 RGB 值 blue = int(target_color[0:2], 16) green = int(target_color[2:4], 16) red = int(target_color[4:6], 16) # 计算目标颜色的范围 lower_range = np.array([blue - threshold, green - threshold, red - threshold]) upper_range = np.array([blue + threshold, green + threshold, red + threshold]) # 创建掩码,将目标颜色范围以外的像素设为黑色,目标颜色范围内的像素设为白色 mask = cv2.inRange(image, lower_range, upper_range) # 将目标颜色范围内的像素设为白色 result[mask > 0] = (255, 255, 255) # 显示结果图像 cv2.imwrite('222.bmp', result) return result ff=fangfa() def main(): hwnd=ff.huoqujubin('【魔域】') if hwnd!=[]: jietushuju=ff.jietu(hwnd) ff.remove_colors_except(jietushuju, ['FFFFFF'], 0) 报错 ff.remove_colors_except(jietushuju, ['FFFFFF'], 0) TypeError: fangfa.remove_colors_except() takes 3 positional arguments but 4 were given
根据你提供的代码,`remove_colors_except` 方法应该是 `fangfa` 类的一个方法,因此在调用时应该使用 `self.remove_colors_except` 而不是 `ff.remove_colors_except`。修改代码如下:
```python
app = QApplication(sys.argv)
screen = QApplication.primaryScreen()
class fangfa:
def jietu(self, hwnd):
img = screen.grabWindow(hwnd).toImage()
buffer = QBuffer()
buffer.open(QBuffer.ReadWrite)
img.save(buffer,"bmp")
dd = Image.open(buffer)
#dd.save("1.bmp")
return dd
def remove_colors_except(self, image, target_colors, threshold):
result = np.zeros_like(image)
for target_color in target_colors:
#例如 target_colors = ['FF0000', '00FF00', '0000FF']
# 将目标色格式 "FFFFFF" 转换成 RGB 值
blue = int(target_color[0:2], 16)
green = int(target_color[2:4], 16)
red = int(target_color[4:6], 16)
# 计算目标颜色的范围
lower_range = np.array([blue - threshold, green - threshold, red - threshold])
upper_range = np.array([blue + threshold, green + threshold, red + threshold])
# 创建掩码,将目标颜色范围以外的像素设为黑色,目标颜色范围内的像素设为白色
mask = cv2.inRange(image, lower_range, upper_range)
# 将目标颜色范围内的像素设为白色
result[mask > 0] = (255, 255, 255)
# 显示结果图像
cv2.imwrite('222.bmp', result)
return result
ff = fangfa()
def main():
hwnd = ff.huoqujubin('【魔域】')
if hwnd != []:
jietushuju = ff.jietu(hwnd)
ff.remove_colors_except(jietushuju, ['FFFFFF'], 0)
```
另外,如果你的代码中有 `import` 语句,需要将其也放在代码开头的位置。
def jietu(self,hwnd): # 获取窗口位置 left, top, right, bottom = win32gui.GetWindowRect(hwnd) width = right - left height = bottom - top # 创建DC对象 hwndDC = win32gui.GetWindowDC(hwnd) mfcDC = win32ui.CreateDCFromHandle(hwndDC) saveDC = mfcDC.CreateCompatibleDC() # 创建位图对象 saveBitMap = win32ui.CreateBitmap() saveBitMap.CreateCompatibleBitmap(mfcDC, width, height) # 将位图选入DC对象 saveDC.SelectObject(saveBitMap) # 截屏 saveDC.BitBlt((0, 0), (width, height), mfcDC, (0, 0), win32con.SRCCOPY) # 获取位图数据 bmpinfo = saveBitMap.GetInfo() bmpstr = saveBitMap.GetBitmapBits(True) # 将位图数据转换为numpy数组 img = np.frombuffer(bmpstr, dtype='uint8') img.shape = (bmpinfo['bmHeight'], bmpinfo['bmWidth'], 4) cv2.imwrite('1.bmp', img) # 释放资源 win32gui.DeleteObject(saveBitMap.GetHandle()) saveDC.DeleteDC() mfcDC.DeleteDC() win32gui.ReleaseDC(hwnd, hwndDC) # 返回截屏结果 return img 将img 传入def bisefs(self,loadjietu,mubiao,suku,wucha): jjieguo=0 for sekus in suku: yanse=sekus[2] red = int(yanse[4:6], 16) green = int(yanse[2:4], 16) blue = int(yanse[0:2], 16) #RGBneirongzhi=(red,green,blue) xxx=int(sekus[0]) yyy=int(sekus[1]) yuanse=loadjietu.getpixel((int(sekus[0]),int(sekus[1]))) #RGByuanse = (yuanse[2], yuanse[1], yuanse[0]) secha = math.sqrt((red-yuanse[2])**2 + (green-yuanse[1])**2 + (blue-yuanse[0])**2) if secha <= wucha: jjieguo=jjieguo+1 if jjieguo==len(suku): return True,xxx,yyy else: return False进行比色并返回结果
这段代码的作用是获取一个窗口的截图,并在截图中检查是否存在特定颜色的像素点。其中,jietu()函数用于获取窗口截图,bisefs()函数用于进行比色并返回结果。具体来说,bisefs()函数接受四个参数:loadjietu为截图的numpy数组,mubiao为目标窗口的位置,suku为需要检查的像素点的坐标和颜色信息,wucha为颜色匹配的误差范围。函数首先遍历所有需要检查的像素点,获取其对应的颜色值,并计算其与目标颜色的差距。如果所有像素点的差距都在误差范围内,则返回True,并返回第一个匹配到的像素点的坐标。否则返回False。
阅读全文