吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1006|回复: 8
收起左侧

[经验求助] 关于python语言简单的问题

[复制链接]
Yifan2007 发表于 2024-4-5 20:09
40吾爱币
两个问题
1.python如何实现高速的找色,要做到小范围内几乎实时的判断。目前我用的是截图再判断,请问有没有更快的方法

2.如何用python实现按键精灵findcolorex功能,即模糊找色

麻烦大佬提供简单的源代码

最佳答案

查看完整内容

import pyautogui def FindColorEx(x1, y1, x2, y2, color, search_mode, similarity): global x, y # 将颜色值从字符串转换为RGB格式 bgr_color = int(color[4:6], 16), int(color[2:4], 16), int(color[0:2], 16) bgr_color = bgr_color[::-1] print(bgr_color) # 获取屏幕截图 screenshot = pyautogui.screenshot(region=(x1, y1, x2 - x1, y2 - y1)) screenshot.save("1.png") ...

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

991547436 发表于 2024-4-5 20:09
import pyautogui


def FindColorEx(x1, y1, x2, y2, color, search_mode, similarity):
    global x, y
    # 将颜色值从字符串转换为RGB格式
    bgr_color = int(color[4:6], 16), int(color[2:4], 16), int(color[0:2], 16)
    bgr_color = bgr_color[::-1]
    print(bgr_color)

    # 获取屏幕截图
    screenshot = pyautogui.screenshot(region=(x1, y1, x2 - x1, y2 - y1))
    screenshot.save("1.png")

    # 根据查找方式选择查找顺序
    if search_mode == 0:
        search_order = [(x, y) for y in range(y1, y2) for x in range(x1, x2)]
    elif search_mode == 1:
        center_x = (x1 + x2) // 2
        center_y = (y1 + y2) // 2
        search_order = sorted([(x, y) for y in range(y1, y2) for x in range(x1, x2)],
                              key=lambda pos: ((pos[0] - center_x) ** 2 + (pos[1] - center_y) ** 2))
    else:
        raise ValueError(
            "Invalid search mode. Use 0 for left-to-right, top-to-bottom search or 1 for center-outward search.")

    # 开始查找颜色
    for pos_x, pos_y in search_order:
        pixel_color = screenshot.getpixel((pos_x - x1, pos_y - y1))
        if color_match(pixel_color, bgr_color, similarity):
            # 如果找到相似的颜色,修改全局变量
            x = pos_x
            y = pos_y
            return
    # 如果没找到,全局变量仍保持为-1
    x = -1
    y = -1


def color_match(color1, color2, similarity):
    # 计算两个颜色的相似度
    delta_blue = abs(color1[0] - color2[0])
    delta_green = abs(color1[1] - color2[1])
    delta_red = abs(color1[2] - color2[2])
    similarity_score = 1 - (delta_blue + delta_green + delta_red) / (255 * 3)
    return similarity_score >= similarity


# 示例使用
# 初始化变量
x = -1
y = -1
# 调用函数
FindColorEx(0, 0, 500, 500, "fafafa", 0, 1.0)
# 输出结果
print("返回坐标x:", x)
print("返回坐标y:", y)

 楼主| Yifan2007 发表于 2024-4-5 21:10
zjg121 发表于 2024-4-6 02:34
[Python] 纯文本查看 复制代码
import pyautogui
from PIL import Image, ImageOps, ImageGrab
from time import sleep

# 等待5秒以确保鼠标已经移动到所需位置
sleep(5)

# 获取鼠标当前位置
current_mouse_position = pyautogui.position()

# 解包坐标
x, y = current_mouse_position

# 捕获屏幕截图
screenshot = pyautogui.screenshot()

# 将截图转换为RGB模式
screenshot_rgb = screenshot.convert('RGB')

# 获取鼠标当前位置的颜色作为标准色
# 注意:这里需要先将鼠标坐标转换为整数,因为PIL的getpixel方法需要整数坐标
standard_color = screenshot_rgb.getpixel((int(x), int(y)))

# 打印标准色(RGB)
print(f"The standard color is: RGB({standard_color[0]}, {standard_color[1]}, {standard_color[2]})")

# 创建一个与截图同样大小的空白图像,用于存放处理后的结果
result = Image.new('RGB', screenshot.size)

# 遍历截图的每个像素
for x_pos in range(screenshot.width):
    for y_pos in range(screenshot.height):
        # 获取当前像素的颜色
        r, g, b = screenshot_rgb.getpixel((x_pos, y_pos))

        # 检查颜色是否与标准色相同或相近(这里可以根据需要调整容差)
        if (r - standard_color[0]) ** 2 + (g - standard_color[1]) ** 2 + (b - standard_color[2]) ** 2 < 100:
            # 如果匹配,则将结果图像中的对应点设置为白色
            result.putpixel((x_pos, y_pos), (255, 255, 255))
        else:
            # 如果不匹配,则将结果图像中的对应点设置为黑色
            result.putpixel((x_pos, y_pos), (0, 0, 0))

# 显示处理后的图像
result.show()

# 如果需要,可以将处理后的图像保存到文件
result.save('processed_screenshot.png')



# 工作流程通过获取鼠标当前位置的颜色作为标准色,然后将屏幕截图中与标准色相近的像素设置为白色,其余像素设置为黑色,从而实现了对屏幕截图的简单二值化处理。
 楼主| Yifan2007 发表于 2024-4-6 07:58
zjg121 发表于 2024-4-6 02:34
[mw_shl_code=python,true]import pyautogui
from PIL import Image, ImageOps, ImageGrab
from time imp ...

好像gpt生成的,和我主题内容不太相关,不过这两天实在没人救采纳您
zjg121 发表于 2024-4-6 13:11
思路是:输入颜色,或者色块用鼠标取色;截屏寻找相似度高的颜色的点;提取点的坐标;模拟移动鼠标到该点。如果找到很多点,鼠标去哪里?
 楼主| Yifan2007 发表于 2024-4-6 20:31
zjg121 发表于 2024-4-6 13:11
思路是:输入颜色,或者色块用鼠标取色;截屏寻找相似度高的颜色的点;提取点的坐标;模拟移动鼠标到该点。 ...

你试着问下  按键精灵模糊找色底层代码
amoxuk 发表于 2024-4-6 21:43
截图肯定是要截的 要做到快最好在内存里操作
靠谱的还是用c实现的库里面进行矩阵操作 比如numpy opencv来做图色操作是效率最高的
 楼主| Yifan2007 发表于 2024-4-6 22:48
amoxuk 发表于 2024-4-6 21:43
截图肯定是要截的 要做到快最好在内存里操作
靠谱的还是用c实现的库里面进行矩阵操作 比如numpy opencv来 ...

可以直接具体代码例子吗
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-15 08:47

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表