Расстояние между 2 пикселями - PullRequest
0 голосов
/ 28 июня 2018

Исходя из разработки программного обеспечения, я новичок в обработке изображений. Я пытаюсь получить расстояние между двумя пикселями в изображении, которое является массивом фигуры (100, 100, 3).

Например, я хочу найти расстояние между синим пикселем (0, 0, 255) и красным пикселем (255, 0, 0) на изображении, я попытался с помощью цикла for или np.where (). ..но безуспешно Расстояние может быть некоторой разницей между двумя индексами в изображении (возможно, что пикселей этих цветов больше, поэтому, по крайней мере, первое, что встречается на изображении)

Есть идеи, как это сделать?

EDIT: Я записываю часть моего экрана так:

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

Теперь я хочу найти пиксель (ы) синего цвета и пиксель (ы) красного цвета и расстояние между ними на изображении

1 Ответ

0 голосов
/ 29 июня 2018

Давайте начнем с тестового изображения. Это 400x300 пикселей серого (192), с:

  • красный квадрат 3х3 в 20,10
  • синий квадрат 3х3 при 300 200

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)
...