2个像素之间的距离
问题描述
来自软件开发,我是图像处理的新手.我尝试获取形状为 (100, 100, 3) 的 numpy 数组的图像中两个像素之间的距离.
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).
例如,我想找到图像中像素蓝色 (0, 0, 255) 和像素红色 (255, 0, 0) 之间的距离,我尝试使用 for 循环或 np.where() ...但没有成功.距离可能是图像中两个索引之间的某种差异(这些颜色的像素可能更多,因此至少在图像中第一次遇到)
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. 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)
知道怎么做吗?
我正在像这样捕获部分屏幕:
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
解决方案
让我们从测试图像开始.它是 400x300 像素的灰色(192),带有:
Let's start with a test image. It is 400x300 pixels of gray(192), with:
- 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]))
现在让我们做蓝色像素:
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))
这给出了:
(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)
相关文章