做网站都去哪里找模板,制作书签二年级,网站联动,哪个公司的软件开发公司目录 一、写在前面
1.1适用场景
1.2涉及到的库
二、函数库
2.1pyautogui-屏幕截图鼠标操作
2.1.1屏幕截图screenshot函数
2.1.2鼠标移动及单击
2.2Opencv-模板匹配
2.2.1matchTemplate函数
2.2.2minMaxLoc函数
2.2.3相关代码
2.3base64-图片转base64
2.3.1在线…目录 一、写在前面
1.1适用场景
1.2涉及到的库
二、函数库
2.1pyautogui-屏幕截图鼠标操作
2.1.1屏幕截图screenshot函数
2.1.2鼠标移动及单击
2.2Opencv-模板匹配
2.2.1matchTemplate函数
2.2.2minMaxLoc函数
2.2.3相关代码
2.3base64-图片转base64
2.3.1在线转换网站
2.3.2转换代码
三、 实例
3.1需求
3.2解决思路
3.3代码 一、写在前面
1.1适用场景
部分需要检测相关软件处于特定状态后执行相应操作
1.2涉及到的库
屏幕状态自动检测Opencv库-模板匹配
鼠标自动操作pyautogui库-执行屏幕截图、鼠标移动及单击等
图片转Base64base64库-避免使用本地图片封装程序
二、函数库
2.1pyautogui-屏幕截图鼠标操作
2.1.1屏幕截图screenshot函数
该函数可用于对屏幕截图并对相关状态进行监测默认为对全屏进行截图
img pyautogui.screenshot()
img.save(test.jpg) 2.1.2鼠标移动及单击
可根据相关事件触发自动对鼠标执行相应操作
①pyautogui.moveTo(x, y, duration0.0)将鼠标移动到指定的坐标(x, y)处。duration参数可选用于指定移动的时间如果设置为非零值则会产生平滑移动的效果。
②pyautoguiclick(xNone, yNone, clicks1, interval0.0, buttonleft)模拟鼠标点击操作。通过指定坐标(x, y)来点击特定位置clicks参数用于指定点击次数interval参数用于指定每次点击的间隔时间button参数可选默认为左键。
pyautogui.moveTo(1500,100, duration0.5)
pyautogui.click()
2.2Opencv-模板匹配
2.2.1matchTemplate函数 image源图像待匹配图像8bit整数型、32bit浮点型可以是单通道或多通道 templ模板图像类型同源图像尺寸必须小于源图像method匹配方法
参考资料OpenCV-Python快速入门十四模板匹配_python 模板匹配-CSDN博客
2.2.2minMaxLoc函数
minMaxLoc()函数返回图像中的元素值的最小值和最大值以及最小值和最大值的坐标。
src输入图像必须为单通道图像mask掩码minval, maxval, minloc, maxloc依次为最小值最大值最小值的坐标最大值的坐标
2.2.3相关代码
#模板匹配输出位置
img cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
templateImg cv2.cvtColor(templateImg, cv2.COLOR_BGR2RGB)
res cv2.matchTemplate(img,templateImg,cv2.TM_CCOEFF_NORMED)
min_val, max_val, min_loc, max_loc cv2.minMaxLoc(res)
left_top max_loc
2.3base64-图片转base64
2.3.1在线转换网站
在线转换网站图片在线转换Base64 | 图片编码base64 (sojson.com)
转换过程如下图 2.3.2转换代码
将base64编码转换为opencv库的图像格式
def readb64(uri):encoded_data uri.split(,)[1]nparr np.fromstring(base64.b64decode(encoded_data), np.uint8)img cv2.imdecode(nparr, cv2.IMREAD_COLOR)return img#图片-base64编码
templateImg readb64(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAcCAYAAABh2p9gAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAASZSURBVEhLzVVdaBxVFB5tUmJqiw0twagEGkWtfZBWQS2KbxYliOCLj4qiVh8EXwRURRU/IForSBCrJFqohYjpFofqpQWVmi7QRPbpuZndjc7uzt/O7uzM3fu53fuTETExz54lpM7cbc73z3O/feWBUvRJUuY8Xn8z85YYInRBBLYRH9189BwfXstBy3Ow7tuohzZa0RqidBWWQmGanhWe0vkh5hDQe3R5R0KXoAQkpxicpkLQ6Jp3yyD9VzKBJewXYWMbeUVBzWdXKooJERoBaVHhIV0AOXbDmKU0MqWgQwYyIsQdfidKNyeRcZD0duFiFjSh5U0AOaZt4ZOhy8UGqWdAczpMSAWYhVQKnTJOpkJMiMt0MctEpIxL5xenW4WHBtZwkaB5moDGILtCl65uM1UoFiFB/HvJokeLTlCJV9DEZSxjWn2N/aUHMHx6FLuW7sDulX3Ys3gnnnKexnGcYMYKC5KxzJe6BUXLVJAGsYJP1AXCTeNbPOYii3nB7EV25i0iT4AK7BwXfUGvIAXcYq/BuychWgvTjNLVmmGsBehxoR5lHDXVsx8tsAxvR29PmWAZJfH7ZgyB3BLeXdmAqnmLWo2zsDhq73EGaKnQ7EYt4OOxjJvs67HT6cfWyMKgtrAZ22HFfbiK6ZvjTRiMISDK89gXp/h4kiRq9QqF9HKqFqmKHso3QRuVuXBMNYad7LfrI7Gqb7uCVd0BS9jSh2qDGDndj1n1GepFqzs9EZOAPTbBc2X75vplE7gB3yH4dUbMYkjmE6m8ZWao65zD6bwZvJy3g8HMeX6ghW2ZqcBkmKljQC9qDIsM3GLOAStIq9k6N4cFz4ziHJZaLWEhhsTJvJpT8UxidGcOsf9L0021cQNaNkWxsG9GyyT8eN7JLkTU1vX9iv/lYYyzb2H5Cv2EOKj5dmsG79aMkUONaWUi1zUYRo4bchpxgo0oZRyYOGABGTWJvsuM1OCZgLI554fs7DGE6WDeCs6zOAf9Cr8LD/UPHqcoGIybOKR2XG88sHhOJMaqJ7iqAtCt/GOqMOGXW0oAOHwi/Q/9M2Zv5JmCX46cUc0PSGgN94R7Hj5O1UcZFYrCZatBXntvjW5C/gtsoLZfxWIfyeE3vxyuXXqUSdeXJ2CWhuiWQFb6y9hpfaE1SxzEAHSUtuFnkUUTxCMVMeJUbQgDC/8xgMTN7MYhLOLzlL9CgFZ3DP5/vwvvs2Pwr10IgvE82FmOR7TMDkcsqnSreAkeP34eHlZ/kmlQhY5T3nEl8Uj5EsDLf1ukdeoQoZpJ0WBCIKYPgG6i6tLzO8gFGj91L/p5EYTW5/ofmnsSP1WN8bcNOmkaNlvINgJGkIGhzzTa55wwl2KTmy3j5fw4dlXTdSKmHKJXXJlk0UiEtM8zdVqxjr55AKwyRzPcKQgPBoJrz1bJmLaFL7sybHSswNuGASdaGZYpMzTgp1sV3Nxs7MRCX85VgwJpe2JmiWOZzGq4zG24ZHjzpkpgM0GUxH/m0SFOFJVx4FTMLGEv7yJuX/pK6EFehXDFDrHPH/Dgj8BbLsDrYrBlhtAAAAAElFTkSuQmCC)cv2.imshow(imageShow, templateImg)
cv2.waitKey(0)
cv2.destroyAllWindows()
转换结果如图 三、 实例
3.1需求
手动流程样品测试完毕后打开防辐射盖信号颜色由绿转红放去样品闭合防辐射盖信号灯由红转绿此时鼠标移动到软件相应位置点击并输入参数执行。
①识别下图红色框中信号状态绿色表示正在设备防辐射盖闭合红色表示防辐射盖开启
②对屏幕进行定时截图并确定鼠标需要移动位置在截图中的像素点 3.2解决思路
由于相关操作是在信号状态由红转绿后操作故仅需对自动截屏图像进行模板匹配识别当前状态是否为绿色若为绿色则执行相应鼠标操作。
整体为2个While死循环配合图像模板匹配结果在适当位置执行break语句跳出子死循环
3.3代码
#红色状态切出去
#红色状态运行程序
import base64
import cv2
import numpy as np
import time
import pyautoguidef readb64(uri):encoded_data uri.split(,)[1]nparr np.fromstring(base64.b64decode(encoded_data), np.uint8)img cv2.imdecode(nparr, cv2.IMREAD_COLOR)return img#图片-base64编码
templateImg readb64(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAcCAYAAABh2p9gAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAASZSURBVEhLzVVdaBxVFB5tUmJqiw0twagEGkWtfZBWQS2KbxYliOCLj4qiVh8EXwRURRU/IForSBCrJFqohYjpFofqpQWVmi7QRPbpuZndjc7uzt/O7uzM3fu53fuTETExz54lpM7cbc73z3O/feWBUvRJUuY8Xn8z85YYInRBBLYRH9189BwfXstBy3Ow7tuohzZa0RqidBWWQmGanhWe0vkh5hDQe3R5R0KXoAQkpxicpkLQ6Jp3yyD9VzKBJewXYWMbeUVBzWdXKooJERoBaVHhIV0AOXbDmKU0MqWgQwYyIsQdfidKNyeRcZD0duFiFjSh5U0AOaZt4ZOhy8UGqWdAczpMSAWYhVQKnTJOpkJMiMt0MctEpIxL5xenW4WHBtZwkaB5moDGILtCl65uM1UoFiFB/HvJokeLTlCJV9DEZSxjWn2N/aUHMHx6FLuW7sDulX3Ys3gnnnKexnGcYMYKC5KxzJe6BUXLVJAGsYJP1AXCTeNbPOYii3nB7EV25i0iT4AK7BwXfUGvIAXcYq/BuychWgvTjNLVmmGsBehxoR5lHDXVsx8tsAxvR29PmWAZJfH7ZgyB3BLeXdmAqnmLWo2zsDhq73EGaKnQ7EYt4OOxjJvs67HT6cfWyMKgtrAZ22HFfbiK6ZvjTRiMISDK89gXp/h4kiRq9QqF9HKqFqmKHso3QRuVuXBMNYad7LfrI7Gqb7uCVd0BS9jSh2qDGDndj1n1GepFqzs9EZOAPTbBc2X75vplE7gB3yH4dUbMYkjmE6m8ZWao65zD6bwZvJy3g8HMeX6ghW2ZqcBkmKljQC9qDIsM3GLOAStIq9k6N4cFz4ziHJZaLWEhhsTJvJpT8UxidGcOsf9L0021cQNaNkWxsG9GyyT8eN7JLkTU1vX9iv/lYYyzb2H5Cv2EOKj5dmsG79aMkUONaWUi1zUYRo4bchpxgo0oZRyYOGABGTWJvsuM1OCZgLI554fs7DGE6WDeCs6zOAf9Cr8LD/UPHqcoGIybOKR2XG88sHhOJMaqJ7iqAtCt/GOqMOGXW0oAOHwi/Q/9M2Zv5JmCX46cUc0PSGgN94R7Hj5O1UcZFYrCZatBXntvjW5C/gtsoLZfxWIfyeE3vxyuXXqUSdeXJ2CWhuiWQFb6y9hpfaE1SxzEAHSUtuFnkUUTxCMVMeJUbQgDC/8xgMTN7MYhLOLzlL9CgFZ3DP5/vwvvs2Pwr10IgvE82FmOR7TMDkcsqnSreAkeP34eHlZ/kmlQhY5T3nEl8Uj5EsDLf1ukdeoQoZpJ0WBCIKYPgG6i6tLzO8gFGj91L/p5EYTW5/ofmnsSP1WN8bcNOmkaNlvINgJGkIGhzzTa55wwl2KTmy3j5fw4dlXTdSKmHKJXXJlk0UiEtM8zdVqxjr55AKwyRzPcKQgPBoJrz1bJmLaFL7sybHSswNuGASdaGZYpMzTgp1sV3Nxs7MRCX85VgwJpe2JmiWOZzGq4zG24ZHjzpkpgM0GUxH/m0SFOFJVx4FTMLGEv7yJuX/pK6EFehXDFDrHPH/Dgj8BbLsDrYrBlhtAAAAAElFTkSuQmCC)#红色状态运行程序
while(True):#识别屏幕img pyautogui.screenshot()img cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2RGBA)#模板匹配输出位置img cv2.cvtColor(img, cv2.COLOR_BGR2RGB)templateImg cv2.cvtColor(templateImg, cv2.COLOR_BGR2RGB)res cv2.matchTemplate(img,templateImg,cv2.TM_CCOEFF_NORMED)min_val, max_val, min_loc, max_loc cv2.minMaxLoc(res)left_top max_locprint(left_top) # time.sleep(2)
# h, w templateImg.shape[:2]
# top_left max_loc
# bottom_right (top_left[0] w, top_left[1] h)
# cv2.rectangle(img, top_left, bottom_right, (255, 0, 0), 5)
# img cv2.resize(img,(0,0),fx0.8, fy0.8)
# cv2.imshow(11111, img)
# cv2.waitKey(0)
# cv2.destroyAllWindows()# print(left_top[0] 1600,left_top[0] 1620,left_top[1] 300)#识别到绿色状态if left_top[0] 1600 and left_top[0] 1620 and left_top[1] 300:print(绿色状态)pyautogui.moveTo(1500,100, duration0.5)pyautogui.click()pyautogui.moveTo(1740,405, duration0.5)pyautogui.click()time.sleep(3)while(True):#识别屏幕img pyautogui.screenshot()img cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2RGBA)#模板匹配输出位置img cv2.cvtColor(img, cv2.COLOR_BGR2RGB)templateImg cv2.cvtColor(templateImg, cv2.COLOR_BGR2RGB)res cv2.matchTemplate(img,templateImg,cv2.TM_CCOEFF_NORMED)min_val, max_val, min_loc, max_loc cv2.minMaxLoc(res)left_top max_locif left_top[0] 1600 and left_top[0] 1620 and left_top[1] 300:pass
# print(绿色状态again)else:#等待检测到红色状态
# print(绿色跳转-红色)break