简体   繁体   English

2像素之间的距离

[英]Distance between 2 pixels

Coming from software development, i'm new to image processing. 来自软件开发,我是图像处理的新手。 I try to get the distance between two pixels in an image that is a numpy array of shape (100, 100, 3). 我试图获得图像中两个像素之间的距离,该图像是一个numpy形状的阵列(100,100,3)。

For example i want to find the distance between a pixel blue (0, 0, 255) and a pixel red (255, 0, 0) in the image, I tried with a for loop or np.where() ... but no success. 例如,我想在图像中找到像素蓝色(0,0,255)和像素红色(255,0,0)之间的距离,我尝试使用for循环或np.where()...但是没有成功。 The distance could be the some kind of difference between the two indexes in the image (possibility that there is more pixels of these colors so at least the first met in the image) 距离可能是图像中两个索引之间的某种差异(这些颜色的像素更多的可能性,因此至少第一个在图像中遇到)

Any idea how to do that ? 知道怎么做吗?

EDIT: I'm capturing part of my screen like that: 编辑:我正在捕捉我的部分屏幕:

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

Now i want to find the pixel(s) of color blue and the pixel(s) of color red and the distance between them in the image 现在我想找到颜色为蓝色的像素和红色的像素以及图像中它们之间的距离

Let's start with a test image. 让我们从测试图像开始。 It is 400x300 pixels of gray(192), with: 它是400x300像素的灰色(192),具有:

  • a red 3x3 square at 20,10, 20,10的红色3x3广场,
  • a blue 3x3 square at 300,200 蓝色3x3方块,300,200

在此输入图像描述

Now do this: 现在这样做:

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

This gives: 这给出了:

(array([10, 10, 10, 11, 11, 11, 12, 12, 12]),
 array([20, 21, 22, 20, 21, 22, 20, 21, 22]))

Now let's do the blue pixels: 现在让我们做蓝色像素:

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

This gives: 这给出了:

(array([200, 200, 200, 201, 201, 201, 202, 202, 202]),
 array([300, 301, 302, 300, 301, 302, 300, 301, 302]))

So now we need the distance from the first red to the first blue pixel 所以现在我们需要从第一个红色到第一个蓝色像素的距离

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)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM