如何用 python 点击图像的第 n 个像素(不是你想的那样)

How to click on the nth pixel of an image with python (NOT WHAT YOU THINK)

我有一些代码可以确定屏幕上每个黑色像素的位置:

last_pixel = 0

time.sleep(0.01)
ss = pyautogui.screenshot()
ss.save(r"Screenshots\ss.png")
image = Image.open(r"Screenshots\ss.png", "r")
pixels = list(image.getdata())
for n, pixel in enumerate(pixels):
    if pixel == (0, 0, 0):
        print(pixel, n)
        last_pixel = n

但是,这个returns,例如“(0, 0, 0) 2048576”,要点击屏幕上的特定点,至少用pynput/pyautogui,你需要x, y 之类的东西,我怎么可能用简单的数字点击图像(屏幕截图)的像素,例如:第 2048576 个像素,点击它。

将您的像素列表重新整形为图像的尺寸,并获取该位置的像素索引。例如

import numpy as np

# 150 pixel long array
a = np.array(range(150))
# If your images was 15 pixels wide by 10 tall find the coordinates of pixel 108
np.where(a.reshape((10,15))==108)

输出

(array([7], dtype=int64), array([3], dtype=int64))

如果您知道图像的大小(宽 x 高),将像素数转换为 [x, y] 坐标是一个简单的数学问题。

img_width = 1920
img_height = 1080

pixel_number = 2000

pixel_row, pixel_col = divmod(pixel_number, img_width)

我不确定像素是以 row-major 还是 column-major 顺序存储的。如果它们以 column-major 顺序存储,您需要做的就是:

pixel_col, pixel_row = divmod(pixel_number, img_height)