匹配窗口是否有特定图片-Python

这篇博客介绍了如何使用Python进行窗口识别和截图,通过窗口截图提升效率,并利用OpenCV进行图像匹配。还实现了图形匹配后的点击功能,包括后台和前台点击的实现方式及其坐标差异。
摘要由CSDN通过智能技术生成

这是我的第一篇博客,记录的是之前匹配微信小程序按键的图像,代码的内容很多都是在各种地方攒的,反正最后的功能还是实现了的。

识别窗口

首先你得确定你要辨别的窗口

import win32con
import win32ui
import win32gui
import win32api
hwnd = win32gui.FindWindow(None, "xxx")  # 父句柄,不懂的可以直接去网上搜索这行代码,会有详细的讲解
hwndChildList = []  # 创建子窗口列表
win32gui.EnumChildWindows(hwnd, lambda hwnd, param: param.append(hwnd), hwndChildList)
hwnd1 = win32gui.FindWindowEx(hwndChildList[0], 0, None, None)
# win32gui.SetForegroundWindow(hwnd)  # 指定句柄设置为前台,也就是激活
# win32gui.ShowWindow(hwnd, win32con.SW_NORMAL)  # 显示最前 从最小化模式显示为正常
windowRec = win32gui.GetWindowRect(hwnd1)  # 目标子句柄窗口的坐标 左上右下边到屏幕边的距离
# 获得窗口的坐标、宽高
left, top, right, bottom = windowRec[0], windowRec[1], windowRec[2], windowRec[3]
width, height = windowRec[2] - windowRec[0], windowRec[3] - windowRec[1]

窗口截图

获取到窗口句柄后就可以进行截图了,截图的目的是为了后面的图形匹配,我本来一直用的桌面截图,效率太低,后来发现可以窗口截图,速度提升了十倍

def capture(file_name, capture_width, capture_height):
    # 返回句柄窗口的设备环境,覆盖整个窗口,包括非客户区,标题栏,菜单,边框
    hWndDC = win32gui.GetWindowDC(hwnd1)
    # 创建设备描述表
    mfcDC = win32ui.CreateDCFromHandle(hWndDC)
    # 创建内存设备描述表
    saveDC = mfcDC.CreateCompatibleDC()
    # 创建位图对象准备保存图片
    saveBitMap = win32ui.CreateBitmap()
    # 为bitmap开辟存储空间
    saveBitMap.CreateCompatibleBitmap(mfcDC, capture_width, capture_height)
    # 将截图保存到saveBitMap中
    saveDC.SelectObject(saveBitMap)
    # 保存bitmap到内存设备描述表
    saveDC.BitBlt((0, 0), (capture_width, capture_height), mfcDC, (0, 0), win32con.SRCCOPY)
    saveBitMap.SaveBitmapFile(saveDC, file_name)
    # 内存释放
    saveDC.DeleteDC()
    win32gui.DeleteObject(saveBitMap.GetHandle())
    mfcDC.DeleteDC()
    win32gui.ReleaseDC(hwnd, hWndDC)
# capture("images/animal_screenshot.png", width, height)

这个代码是找的网上的,我也不懂原理好用就行,是我在所有代码里找的最好用而且最快的

最后一行是代码解释
第一个传入的参数是保存的文件路径,我写的是存入一个images的文件夹并保存成animal_screenshot的图片
第二个是窗口的宽,第三个就是窗口的高

匹配图形

实现图形匹配

def check_pic(img_name, a, click=False):
    # 屏幕缩放系数 mac缩放是2 windows一般是1
    screenScale = 1
    # 事先读取按钮截图
    img_path = 'images/{img}.png'.format(img=str(img_name))
    target = cv2.imread(
  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个错误通常是因为 OpenCV 无法找到特定窗口或图像文件。可能有几个原因导致这个问题,比如: 1. 图像路径错误:请确保您提供的图像路径是正确的,并且图像文件确实存在。 2. 窗口名错误:如果您正在尝试访问一个不存在的窗口,请确保您输入的窗口名是正确的。 3. OpenCV 版本问题:某些版本的 OpenCV 可能会遇到此问题。尝试更新到最新版本或回退到较旧的版本。 4. 编译问题:如果您是自己编译的 OpenCV,那么可能会出现编译问题。请检查您的编译选项是否正确,并且您的代码与您所编译的版本兼容。 您可以尝试通过检查以上原因来解决这个问题。如果还有问题,您可以提供更多的错误信息和代码,以便更好地帮助您解决问题。 ### 回答2: cv2.error是OpenCV库的一个错误类型。该错误通常发生在使用opencv-python库时,具体位于highgui模块的window.cpp文件的第971行。 这个错误可能有多种原因。一种可能是在调用opencv-python库中的图形用户界面函数时出现了问题。这些函数负责创建和管理窗口,显示和处理图像等。可能是参数传递错误或者部分必需的库文件缺失导致的。 解决这个错误的方法有几种。首先,我们可以检查所使用的OpenCV版本是否与报错中的版本匹配。如果版本不一致,可以尝试升级或降级到与所安装的库匹配的版本。 其次,我们可以检查所使用的参数是否正确。确保正确设置窗口的相关属性和参数。 另外,还应该确保所使用的库文件完整且正确安装。有时候,缺少某些关键的库文件会导致该错误的发生。可以尝试重新安装opencv-python库,或者手动安装所需的库文件。 如果上述方法都不起作用,还可以尝试卸载并重新安装opencv-python库。这将清除可能存在的任何错误或冲突,并重新安装库文件,以便修复错误。 总之,cv2.error: OpenCV(4.7.0) D:\a\opencv-python\opencv-python\opencv\modules\highgui\src\window.cpp:971:... 是OpenCV库在窗口管理函数中的一个错误。通过检查版本、参数和库文件的完整性,可以解决这个问题。 ### 回答3: 这个错误提示显示了在使用OpenCV库的高级图形用户界面模块时发生了一个错误,程序找不到具体的窗口.cpp文件。通常,这种错误是由于以下几个原因之一: 1. OpenCV库版本不兼容:发生这个错误的可能性之一是您安装的OpenCV库版本与当前程序代码不兼容。解决这个问题的方法是确保OpenCV库的版本与您的程序代码所需的版本匹配。 2. 缺少依赖库:OpenCV库需要一些其他的依赖库来正常工作,如图形库、视频库等。这个错误有可能是由于缺少这些依赖库造成的。您可以通过检查您的系统环境和OpenCV库的依赖项来解决这个问题。 3. 文件路径错误:这个错误显示了cpp文件的具体路径,可能是由于您的程序代码中引用的OpenCV库文件的路径不正确导致的。您可以检查程序代码中的路径设置和文件引用,确保它们指向正确的文件路径。 解决这个问题的方法是首先确定OpenCV库的版本和您的代码要求的版本是否匹配。然后,您可以检查系统环境和库的依赖项,确认所有的依赖库都已正确安装。最后,您可以检查程序代码中的文件路径设置和文件引用,确保它们正确指向OpenCV库文件的路径。如果问题仍然存在,您可以查阅OpenCV的官方文档和社区,了解更多关于这个错误的详细信息和解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值