python找不同游戏_【好玩的计算机视觉】自动玩寻找不一样的色彩4399小游戏

本文介绍如何利用Python的pyscreenshot和OpenCV库实现自动玩4399上的找不同色彩游戏。通过截屏、图像处理、边界检测和鼠标模拟,程序能在限定时间内找出并点击颜色不同的方块。
摘要由CSDN通过智能技术生成

[1.2 单个神经元的分类作用以sigmoid函数作为神经元的激励函数为例,这个大家可能稍微熟悉一点,毕竟我们逻辑回归部分重点提到了这个非线性的函数,把输入值压缩成0-1之间

在4399上玩了一个寻找不一样的色彩小游戏,如下图所示:

目的就是找到颜色不同的方块,点一次升一次级,限定时间25秒,点的快时间可以不变。最开始2x2,3x3,4x4,5x5等等逐渐增多,最后9x9不变。我的思路首先是截一张图,这里我用的是pyscreenshot模块,让用户用鼠标点击游戏总方块的左上顶角和右下顶角,这样确定了目标区域。以9x9的时候为例,代码如下:

import cv2

import numpy as np

import os

import pyscreenshot as ss

import time

def onMouse(event, x, y, flags, param):

global flag, pLeftTop, pRightBottom

if event == cv2.EVENT_LBUTTONDOWN:

if flag:

pLeftTop = (x,y)

else:

pRightBottom = (x,y)

flag = False

flag = True

pLeftTop = None

pRightBottom = None

cv2.namedWindow('frame')

cv2.setMouseCallback('frame', onMouse)

img = ss.grab(bbox=(0,0,1300,768))

img = np.array(img)

cv2.imshow('frame', img)

if cv2.waitKey(0) & 0xff == ord(' '):

cv2.destroyWindow('frame')

flag, pLeftTop, pRightBottom是全局变量,onMouse是获取鼠标的回调函数。

while True:

img = ss.grab(bbox=(0,0,1300,768))

img = np.array(img)

target = img[pLeftTop[1]:pRightBottom[1],pLeftTop[0]:pRightBottom[0]]

gray = cv2.cvtColor(target, cv2.COLOR_BGR2GRAY)

ret, thresh = cv2.threshold(gray, 220, 255, cv2.THRESH_BINARY_INV)

接下来二值化处理,我这里设的阈值是220,取反处理,结果如下:

[win7 下,安装的VS2010,然后搭配opencv2.4.3运行,报错为:fatal error LNK1112: 模块计算机类型“X86”与目标计算机类型“x64”冲突 。通过网上查询,给错的答案大同小

im, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

centers = []

centersGray = []

#d = 0

for c in contours:

(x,y), radius = cv2.minEnclosingCircle(c)

x, y = int(x), int(y)

centers.append((x,y))

centersGray.append(gray[y,x])

#d+=1

#cv2.circle(target, (x,y), 2, (0,255,0), 2)

#cv2.putText(target, str(d), (x,y), cv2.FONT_HERSHEY_SIMPLEX,0.5,(0,0,0))

接下来通过边界找到所有的颜色方块,取消上面代码的注释可以看到如下:

sets = set(centersGray)

index = None

for s in sets:

if centersGray.count(s) == 1:

index = centersGray.index(s)

break接下来就是找到不同的那个颜色块,可以通过list的自带count函数快速找到,在图上显示就是:

realX = centers[index][0] + pLeftTop[0]

realY = centers[index][1] + pLeftTop[1]

os.system('xdotool mousemove '+str(realX)+' '+str(realY))

os.system('xdotool click 1')

最后获取屏幕上真实的像素位置,用xdotool模拟鼠标移动和点击即可。

[1. 引言上一节我们讲完了各种激励函数的优缺点和选择,以及网络的大小以及正则化对神经网络的影响。这一节我们讲一讲输入数据预处理、正则化以及损失函数设定的一些事情。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值