python 找色点击_Python实现按键精灵(二)-找图找色

一、实现功能

判断在指定坐标范围内,是否存在相似度大于n的图片,并返回坐标。

二、基本思路

A=你需要寻找的图片

B=截取当前页面中指定范围的图片

利用opencv 判断A在B中的位置,

在该位置截取与A图同大小的图片C

对比图片C与图片A的相似度

三、实现的代码段

1、安装所需要的库

pip install opencv-python

pip install pywin32

2、截取指定坐标的图片

参数说明

filename:保存的文件名

hwnd:窗口句柄 请想办法获取

pos:坐标位置 [x1,y1,x2,y2]。x1,y1 是左上角坐标、x2,y2 指右下角坐标。

该功能可以返回不在最顶层程序的截图。

def window_capture(filename,hwnd=0,pos=None):

hwnd= hwnd #窗口的编号,0号表示当前活跃窗口

#根据窗口句柄获取窗口的设备上下文DC(Divice Context)

hwndDC =win32gui.GetWindowDC(hwnd)#根据窗口的DC获取mfcDC

mfcDC =win32ui.CreateDCFromHandle(hwndDC)#mfcDC创建可兼容的DC

saveDC =mfcDC.CreateCompatibleDC()#创建bigmap准备保存图片

saveBitMap =win32ui.CreateBitmap()#获取监控器信息

MoniterDev =win32api.EnumDisplayMonitors(None, None)if pos==None:

x1=0

y1=0

w= MoniterDev[0][2][2]

h= MoniterDev[0][2][3]else:

x1=pos[0]

y1=pos[1]

w=pos[2]-pos[0]

h=pos[3]-pos[1]#print w,h   #图片大小

#为bitmap开辟空间

saveBitMap.CreateCompatibleBitmap(mfcDC, MoniterDev[0][2][2], MoniterDev[0][2][3])#高度saveDC,将截图保存到saveBitmap中

saveDC.SelectObject(saveBitMap)#截取从左上角(0,0)长宽为(w,h)的图片

saveDC.BitBlt((x1, y1), (w, h), mfcDC, (x1, y1), win32con.SRCCOPY)

saveBitMap.SaveBitmapFile(saveDC, filename)

3、利用opencv 判断A在B中的位置

参数说明

target:cv2.imread(“图片B”)

template:cv2.imread(“图片A”)

deffind_picture(target,template):#获得模板图片的高宽尺寸

theight, twidth = template.shape[:2]#执行模板匹配,采用的匹配方式cv2.TM_SQDIFF_NORMED

result =cv2.matchTemplate(target,template,cv2.TM_SQDIFF_NORMED)#归一化处理

cv2.normalize( result, result, 0, 1, cv2.NORM_MINMAX, -1)#寻找矩阵(一维数组当做向量,用Mat定义)中的最大值和最小值的匹配结果及其位置

min_val, max_val, min_loc, max_loc =cv2.minMaxLoc(result)#匹配值转换为字符串

#对于cv2.TM_SQDIFF及cv2.TM_SQDIFF_NORMED方法min_val越趋近与0匹配度越好,匹配位置取min_loc

#对于其他方法max_val越趋近于1匹配度越好,匹配位置取max_loc

strmin_val =str(min_val)#绘制矩形边框,将匹配区域标注出来

#min_loc:矩形定点

#(min_loc[0]+twidth,min_loc[1]+theight):矩形的宽高

#(0,0,225):矩形的边框颜色;2:矩形边框宽度

cv2.rectangle(target,min_loc,(min_loc[0]+twidth,min_loc[1]+theight),(0,0,225),2)#显示结果,并将匹配值显示在标题栏上

#cv2.imshow("MatchResult----MatchingValue="+strmin_val,target)

#cv2.waitKey()

#cv2.destroyAllWindows()

x=min_loc[0]

y=min_loc[1]return X,Y

4、返回指定图片的指定位置指定坐标

#target原始图片#x,y 起始坐标#w,h 返回的宽长

defget_pic_from_pic(x,y,w,h,target):

region= target[y:y+h,x:x+w]

retrun region

5、比较两个图片的相似度

defcompare_picture( imageA, imageB):#灰度图片比较

grayA =cv2.cvtColor(imageA, cv2.COLOR_BGR2GRAY)

grayB=cv2.cvtColor(imageB, cv2.COLOR_BGR2GRAY)

(score, diff)= compare_ssim(grayA, grayB, full=True)return float(score)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/326465.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Numeral.js数字格式化

翻译自 Numeral.js 用它 在浏览器中 <script src"numeral.min.js"></script> 或者引用从cdnjs.com <script src"http://cdnjs.cloudflare.com/ajax/libs/numeral.js/2.0.6/numeral.min.js"></script> 在Node.js中 npm inst…

sqlserver中常用的几个存储过程

sqlserver中的存储过程&#xff0c;何为存储过程呢&#xff1f; 存储过程&#xff08;Stored Procedure&#xff09;是在大型数据库系统中&#xff0c;一组为了完成特定功能的SQL 语句集&#xff0c;存储在数据库中&#xff0c;经过第一次编译后再次调用不需要再次编译&#x…

java枚举类定义性别_Java 枚举类和自定义枚举类和enum声明及实现接口的操作

1.枚举类注&#xff1a;JDK1.5之前需要自定义枚举类JDK 1.5 新增的 enum 关键字用于定义枚举类若枚举只有一个成员, 则可以作为一种单例模式的实现方式1.枚举类的属性1、枚举类对象的属性不应允许被改动, 所以应该使用 private final 修饰2、枚举类的使用 private final 修饰的…

2020蓝桥杯省赛---java---B---4( 合并检测)

题目描述 思路分析 假设A国有n个人&#xff0c;感染者有n/100 每k个人一组&#xff0c;共n/k组&#xff0c;共用n/k瓶试剂 按照最坏的情况&#xff0c;每多出一个感染者就多用k瓶试剂&#xff0c; 因此共用n/k(n/100)*k瓶试剂 n是定值&#xff0c;所以求(1/kk/100)最小 由于ab…

visual studio 2017发布dotnet core到docker

docker的好处不用多说&#xff0c;有不了解的可移步《docker入门》&#xff0c;作为一个.net方面的老鸟也想早点搭上docker末班车&#xff0c;减少布署中的各种坑。以下我是在Visual Studio 2017正式版发布后&#xff08;其实VS2015也是可以的&#xff09;&#xff0c;完全跑起…

URLSearchParams 接口

转载自 URLSearchParams 接口 URLSearchParams 接口定义了很多个用来处理 URL 参数串的方法。 基本使用方法如下 var paramsString "qURLUtils.searchParams&topicapi" // location.search.slice(1) var searchParams new URLSearchParams(paramsString);s…

JDK环境变量配置

1.变量名&#xff1a; JAVA_HOME 变量值&#xff1a;&#xff08;变量值填写你的jdk的安装目录&#xff0c;例如本人是 E:\Java\jdk1.8.0&#xff09;2.变量名&#xff1a; Path 变量值&#xff1a; ;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;3.变量名&#xff1a; CLASSPATH 变量…

2020蓝桥杯省赛---java---B---5( REPEAT 程序)

题目描述 【问题描述】附件 prog.txt 中是一个用某种语言写的程序。其中 REPEAT k 表示一个次数为 k 的循环。循环控制的范围由缩进表达&#xff0c;从次行开始连续的缩进比该行多的&#xff08;前面的空白更长的&#xff09;为循环包含的内容。例如如下片段&#xff1a;REPEA…

java oschina_简单说说 OSChina 的技术架构

OsChina.NET 这个域名是在去年 08年8月16日申请的&#xff0c;然后花了不足一个月的时候开发了第一个版本的OsChina&#xff0c;包含有项目展示、新闻、后台管理、会员注册等功能&#xff0c;以后的每次的改进就没那么集中&#xff0c;有空的话就完善完善一直到今天&#xff0c…

强势解析 eBay BASE 模式、去哪儿及蘑菇街分布式架构

互联网行业是大势所趋&#xff0c;从招聘工资水平即可看出&#xff0c;那么如何提升自我技能&#xff0c;满足互联网行业技能要求&#xff1f;需要以目标为导向&#xff0c;进行技能提升。 本文主要针对分布式系统设计、架构(数据一致性)做了分析&#xff0c;祝各位早日走上属于…

MySQL sum()函数

转载自 MySQL sum()函数 MySQL SUM()函数介绍 SUM()函数用于计算一组值或表达式的总和&#xff0c;SUM()函数的语法如下&#xff1a; SUM(DISTINCT expression)SUM()函数是如何工作的&#xff1f; 如果在没有返回匹配行SELECT语句中使用SUM函数&#xff0c;则SUM函数返回…

利用老毛头启动盘重装win7

注意&#xff1a;请不要跟着本教程一步一步的做&#xff0c;要先看一遍 1&#xff0e;安装win7安装 安装win7系统所需材料&#xff1a; 老毛桃PE系统 下载地址&#xff1a;http://www.laomaotao.tv/如使用其它PE系统也是一样&#xff0c;这里我用老毛桃为例 Win系统镜像…

2020蓝桥杯省赛---java---B---6(分类计数)

题目描述 思路分析 把字符串转换成字符数组 代码实现 package com.atguigu.lanqiao;import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);String str sc.next();char[] temp str.toCharArray();int…

MySQL min()函数

转载自 MySQL min()函数 MySQL MIN函数 MIN()函数返回一组值中的最小值。MIN()函数在某些情况下非常有用&#xff0c;例如找到最小的数字&#xff0c;选择最便宜的产品&#xff0c;获得最低的信用额度等。 以下说明MIN()函数的语法&#xff1a; MIN(DISTINCT expression);…

使用 C# 运行符号测试

若有需前后对比的数据&#xff0c;且要确定某种效果是否有统计依据&#xff0c;最常使用的是符号检验。通过举例可以很好地解释这个原理。 假设你在一家制药公司工作&#xff0c;想要确定一种新型减肥药是否有效。你找来八名志愿者服用这种减肥药长达几周的时间。观察八名实验对…

程序人生

在大家眼里程序员是什么样子的呢&#xff1f;是每天不分日夜的在打代码&#xff1f;还是忙来忙去的帮着被人修电脑&#xff0c;调路由器&#xff1f;还是&#xff1f;或者&#xff1a;哈哈哈&#xff0c;作为一个程序员&#xff0c;我是这样的&#xff1a;下班之后先做饭&#…

2020蓝桥杯省赛---java---B---7(分类计数)

题目描述 代码实现 package com.atguigu.lanqiao;import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);long a sc.nextLong();while (a>1){System.out.print(a" ");a/2;}} }

dw怎么在框架中加入网页_怎样使用iframe,在网页中插入页面

首先&#xff0c;我们使用DreamWeaver新建一个站点&#xff0c;将我们需要归纳到一个页面的网页都包含在这个站点里面。然后我们找到一个需要嵌入页面的html文件&#xff0c;使用DW软件打开&#xff0c;找到需要插入页面的位置。3然后我们输入标签。在前半个标签的里面&#xf…

ps中将图片拖不进ps的编辑区的解决方法

今天在学习ps的过程中&#xff0c;发现我的ps怎么和人家老师的不一样&#xff0c;怎么不一样呢&#xff1f;人家老师的ps5中&#xff0c;鼠标可以直接拖到ps的编辑栏中&#xff0c;可是我的死活拖不进去。怎么办&#xff1f;怎么办&#xff1f;经过自己瞎鼓捣和上网查&#xff…

MySQL avg()函数

转载自 MySQL avg()函数 MySQL AVG()函数简介 MySQL AVG()函数是一个聚合函数&#xff0c;它用于计算一组值或表达式的平均值。 AVG()函数的语法如下&#xff1a; AVG(DISTINCT expression)您可以使用AVG()函数中的DISTINCT运算符来计算不同值的平均值。 例如&#xff0c;…