Distance between 2 pixels

前端 未结 1 1279
情书的邮戳
情书的邮戳 2021-01-07 11:34

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

<
相关标签:
1条回答
  • 2021-01-07 12:05

    Let's start with a test image. It is 400x300 pixels of gray(192), with:

    • a red 3x3 square at 20,10,
    • a blue 3x3 square at 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)
    
    0 讨论(0)
提交回复
热议问题