Image processing 彩色探测机器人
我想创建一个脚本,自动点击游戏中的移动目标 要做到这一点,我想检查屏幕上的颜色,以确定我的目标在哪里,然后单击他,如果他移动,重复这个 我不擅长编程,下面我提出的解决方案可能更简单: 1/将屏幕分成相等的分幅-分幅大小应代表游戏中的对象 2/循环每个瓷砖的每个像素,并创建像素颜色的直方图 3/如果最常见的记录颜色与我们需要的颜色匹配,我们可能会有正确的瓷砖。保存坐标并单击对象以完成任务 4/每0.5秒检查一次颜色,以确定对象是否移动,如果没有,则继续单击,如果有,重复步骤1、2和3 我不确定技术上如何做的步骤是步骤1。我需要什么样的数据结构来制作磁贴?二维阵列就足够了吗?将每种颜色的值存储在此数组中,然后确定它是否为对象。同样在pseudo中,我如何将屏幕分割为要搜索的分块?瓷砖问题是我的主要问题 为rayryeng 2编辑: 我将使用Python完成这项任务。这不是我的游戏,我只是想创建一个宏来自动执行游戏中的任务。我还没有代码,我正在寻找更多的想法背后使这项工作比实际的代码 第三次编辑和最终代码:Image processing 彩色探测机器人,image-processing,macros,pixel,bots,Image Processing,Macros,Pixel,Bots,我想创建一个脚本,自动点击游戏中的移动目标 要做到这一点,我想检查屏幕上的颜色,以确定我的目标在哪里,然后单击他,如果他移动,重复这个 我不擅长编程,下面我提出的解决方案可能更简单: 1/将屏幕分成相等的分幅-分幅大小应代表游戏中的对象 2/循环每个瓷砖的每个像素,并创建像素颜色的直方图 3/如果最常见的记录颜色与我们需要的颜色匹配,我们可能会有正确的瓷砖。保存坐标并单击对象以完成任务 4/每0.5秒检查一次颜色,以确定对象是否移动,如果没有,则继续单击,如果有,重复步骤1、2和3 我不确定技术
#!/usr/bin/python
import win32gui, win32api
#function to take in coords and return colour
def colour_return(x,y):
colours = win32gui.GetPixel(win32gui.GetDC(win32gui.GetActiveWindow()), x,y)
return colours
def click(x,y):
win32api.SetCursorPos((x,y))
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)
#variable declaration
x = 1
y = 1
pixel_value = []
colour_found = 0
while x < 1600:
pixel_value = colour_return(x,y)
if pixel_value == 1844766:
click(x,y)
x=x+1
#print x
print y
if x == 1600:
y=y+1
x=1
#print tile
pixel_value = 0
#/usr/bin/python
导入win32gui、win32api
#函数接收坐标并返回颜色
def颜色返回(x,y):
colors=win32gui.GetPixel(win32gui.GetDC(win32gui.GetActiveWindow()),x,y)
返回颜色
def单击(x,y):
win32api.SetCursorPos((x,y))
win32api.mouse_事件(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0)
win32api.mouse_事件(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)
#变量声明
x=1
y=1
像素_值=[]
找到的颜色=0
当x<1600时:
像素值=颜色返回(x,y)
如果像素_值==1844766:
单击(x,y)
x=x+1
#打印x
打印y
如果x==1600:
y=y+1
x=1
#印花瓷砖
像素值=0
这是我制作的最后一段代码。它可以工作,但速度非常慢。搜索y=1的所有1600像素需要30秒。我想是我的方法不起作用。我现在不再使用直方图和瓷砖,而是搜索颜色,并在匹配时单击坐标。在整个屏幕上搜索某种颜色时,最快的方法是什么?我见过一些颜色检测机器人,它们能够在每一秒都跟上一个移动的角色。您还没有提供用于执行此操作的语言/范例。还有,到目前为止你们有什么?您是否已经设置了一些功能,这是您在游戏中调用的功能?如果您最终希望将每个瓷砖表示为直方图,只需将其设置为1D颜色数组即可。然而,你必须计算出你需要多少量化来计算出你想要多少颜色,因为做一个颜色直方图有点难处理。如何计算颜色直方图之间的相似性?使用灰度更直观。