python获取给定图片或当前屏幕截图中指定区域中指定像素的坐标点集

1.返回图片中选中的区域坐标

from typing import Union, List, Tuple

def find_area(search_: str, screen_x: int, screen_y: int) -> Union[None, Tuple[int, int, int, int]]:
    # 解析传入的数据,提取x和y的划分数
    x_division = int(search_[search_.index('x') + 1])
    y_division = int(search_[search_.index('y') + 1])

    coms = x_division * y_division

    target_index = int(search_[search_.index('g') + 1])
    if target_index > coms:
        return None
    # 计算每个划分的宽度和高度
    x_width = screen_x / x_division
    y_height = screen_y / y_division

    # 计算目标索引所在的划分
    target_x_index = (target_index - 1) % x_division
    target_y_index = (target_index - 1) // x_division

    # 计算目标划分的左上角坐标
    target_x = int(target_x_index * x_width)
    target_y = int(target_y_index * y_height)

    # 计算目标划分的右下角坐标
    target_x_end = int(target_x + x_width)
    target_y_end = int(target_y + y_height)

    # 返回目标划分的四个顶点坐标
    return target_x, target_y, target_x_end, target_y_end


x = 2560  # 截图的x轴最大像素
y = 1440  # 截图的y轴最大像素
# 示例用法

msg = 'x2y2g1'  # 整个图片表示把x轴划分为2等分,y轴划分为2等分,然后从左往右,从上到下选择第1个部分

print(find_area(search_=msg, screen_x=x, screen_y=y)) # ((0, 0, 1280, 720))

在这里插入图片描述

2.获取屏幕当前截图中某块区域里面指定像素的坐标集

from typing import Union, List, Tuple

from PIL import ImageGrab, Image

def find_pixel(pixel_rgb: Tuple[int, int, int], pic: Union[None, str] = None, search_area: Union[None, str] = None) -> \
        List[Union[Tuple[int, int]]]:
    """
    # 获取指定像素点的坐标集
    :param pic 图片路径,不传该参数表示截取屏幕
    :param search_area : 设置搜索范围功能 x3y2g2: 整个图片表示把x轴划分为3等分,y轴划分为2等分,然后从左往右,从上到下选择第2个部分
    :param pixel_rgb: 指定的像素
    :return: 指定颜色的像素点的列表
    """

    if pic:
        screenshot = Image.open(pic)
    else:
        screenshot = ImageGrab.grab()
    _x, _y = screenshot.size

    if search_area is not None:
        left, upper, right, lower = find_area(search_area, _x, _y)
        screenshot = screenshot.crop(box=(left, upper, right, lower))
    else:
        left, upper, right, lower = 0, 0, _x, _y
    # 遍历图像的像素并将颜色为指定颜色的像素点加入到列表中
    return [(left + x, upper + y) for x in range(screenshot.width) for y in
            range(screenshot.height) if screenshot.getpixel((x, y)) == pixel_rgb]
        
  • 9
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值