来自软件开发,我是图像处理的新手。 我尝试获取图像中两个像素之间的距离,该图像是形状为 (100, 100, 3) 的 numpy 数组。
例如,我想找到图像中蓝色像素 (0, 0, 255) 和红色像素 (255, 0, 0) 之间的距离,我尝试使用 for 循环或 np.where() 。 ..但没有成功。 距离可能是图像中两个索引之间的某种差异(这些颜色的像素可能更多,所以至少在图像中第一次相遇)
知道怎么做吗?
编辑: 我正在像这样捕获部分屏幕:
screen = np.array(pyautogui.screenshot(region=(80,120,100,100)))
现在我想在图像中找到蓝色像素和红色像素以及它们之间的距离
最佳答案
让我们从测试图像开始。它是 400x300 像素的灰色(192),具有:
- 20,10 处的红色 3x3 正方形,
- 300,200 处的蓝色 3x3 正方形
现在这样做:
import numpy as np
import PIL
import math
# Load image and ensure RGB - just in case palettised
im=Image.open("a.png").convert("RGB")
# Make numpy array from image
npimage=np.array(im)
# Describe what a single red pixel looks like
red=np.array([255,0,0],dtype=np.uint8)
# Find [x,y] coordinates of all red pixels
reds=np.where(np.all((npimage==red),axis=-1))
这给出:
(array([10, 10, 10, 11, 11, 11, 12, 12, 12]),
array([20, 21, 22, 20, 21, 22, 20, 21, 22]))
现在让我们来处理蓝色像素:
# Describe what a single blue pixel looks like
blue=np.array([0,0,255],dtype=np.uint8)
# Find [x,y] coordinates of all blue pixels
blues=np.where(np.all((npimage==blue),axis=-1))
这给出:
(array([200, 200, 200, 201, 201, 201, 202, 202, 202]),
array([300, 301, 302, 300, 301, 302, 300, 301, 302]))
所以现在我们需要从第一个红色像素到第一个蓝色像素的距离
dx2 = (blues[0][0]-reds[0][0])**2 # (200-10)^2
dy2 = (blues[1][0]-reds[1][0])**2 # (300-20)^2
distance = math.sqrt(dx2 + dy2)
关于python - 2个像素之间的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51084825/