2像素之间的距离

时间:2018-06-28 13:59:00

标签: python numpy opencv image-processing computer-vision

来自软件开发,我是图像处理的新手。 我尝试获取图像中的两个像素之间的距离,该图像是一个形状为(100,100,3)的numpy数组。

例如,我想找到图像中像素蓝色(0、0、255)和像素红色(255、0、0)之间的距离,我尝试使用for循环或np.where()。 ..但没有成功。 距离可能是图像中两个索引之间的某种差异(可能是这些颜色的像素更多,因此至少图像中的第一个像素会发生

有什么想法吗?

编辑: 我正在这样捕获屏幕的一部分:

screen = np.array(pyautogui.screenshot(region=(80,120,100,100)))

现在我想在图像中找到蓝色的像素和红色的像素以及它们之间的距离

1 个答案:

答案 0 :(得分:2)

让我们从测试图像开始。它是400x300像素的灰度(192),具有:

  • 在20,10处的红色3x3正方形,
  • 一个300x200的蓝色3x3正方形

enter image description here

现在执行此操作:

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)