参考网络大神们的经验,写的一个mame模拟器版大家来找碴的外挂,
屏幕分辨率设置成1920*1080,
开mame模拟器之后得进入全屏幕,快捷键是alt+enter键
进入找碴的两个相同画面后,暂停游戏,默认键是P
alt+tab键弹出来,运行python外挂,
这时候不要动,外挂会自动找到游戏,自动找到5处不同并画图标出来,根据外挂画的图,自己再返回游戏,手动标出5处不同.
其实可以做的更完美一些,让python自动化操作,控制鼠标点不同.
不过我没耐心,懒得研究怎么弄了.
有时候截屏是黑屏,那就要重新运行一次外挂.
import win32gui
from PIL import ImageGrab
import win32con
import cv2
import matplotlib.pyplot as plt
import imutils
from matplotlib.image import imread
#调用ssim函数
from skimage.metrics import structural_similarity
game_hwnd = win32gui.FindWindow("MAME", "MAME: 大家来找碴 [photoy2k]")
print(game_hwnd)
win32gui.ShowWindow(game_hwnd, win32con.SW_RESTORE)
# 强行显示界面后才好截图
win32gui.SetForegroundWindow(game_hwnd)
# 将游戏窗口提到最前
# 裁剪得到全图
game_rect = win32gui.GetWindowRect(game_hwnd)
src_image = ImageGrab.grab(bbox = None)
src_image.show()
# 分别裁剪左右内容图片
left_box = (39, 261, 39+882, 261+772)
right_box = (999, 261, 999+882, 261+772)
image_left = src_image.crop(left_box)
image_right = src_image.crop(right_box)
image_left.show()
image_right.show()
image_left.save("image_left.png")
image_right.save("image_right.png")
print(type(image_right))
imageA = cv2.imread("image_left.png")
imageB = cv2.imread("image_right.png")
grayA = cv2.cvtColor(imageA, cv2.COLOR_BGR2GRAY)
grayB = cv2.cvtColor(imageB, cv2.COLOR_BGR2GRAY)
#返回三个值
mssim, grad , S = structural_similarity(grayA, grayB, gradient=True,full=True)
'''
mssim:float
图像上的平均结构相似性指数。
grad:ndarray
im1 和 im2 [2]之间结构相似性的梯度。这仅在梯度设置为 True 时返回。
S:ndarray
完整的 SSIM 图像。这仅在full设置为 True 时返回。
'''
S= (S* 255).astype("uint8")
thresh = cv2.threshold(S, 0, 255,cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1]
cnts = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
cnts = imutils.grab_contours(cnts)
for c in cnts:
(x, y, w, h) = cv2.boundingRect(c)
cv2.rectangle(imageA, (x, y), (x + w, y + h), (0, 0, 255), thickness = 4)
cv2.rectangle(imageB, (x, y), (x + w, y + h), (0, 0, 255), thickness = 4)
cv2.waitKey(0)
cv2.imwrite(filename="Find_Different.png", img=imageB)
img = imread('Find_Different.png')
plt.imshow(img)
plt.show()
外挂找出来的不同效果如下:
尽量把蓝色鼠标箭头移到画面外,不然会把鼠标箭头的位置当成不同找出来
版权声明:本文为lmhopen原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。