Вы можете сделать это очень просто с Numpy, что лежит в основе большинства библиотек обработки изображений в Python, таких как OpenCV , или skimage , или Wand . Здесь я сделаю это с OpenCV , но вы также можете использовать любой из вышеперечисленных или PIL / Pillow.
Используя это изображение с синей линией справа:
#!/usr/bin/env python3
import cv2
import numpy as np
# Load image
im = cv2.imread('image.png')
# Define the blue colour we want to find - remember OpenCV uses BGR ordering
blue = [255,0,0]
# Get X and Y coordinates of all blue pixels
X,Y = np.where(np.all(im==blue,axis=2))
print(X,Y)
Вывод
[ 0 2 4 6 8 10 12 14 16 18] [80 81 82 83 84 85 86 87 88 89]
Или, если вы хотите, чтобы они были упакованы в один массив:
zipped = np.column_stack((X,Y))
array([[ 0, 80],
[ 2, 81],
[ 4, 82],
[ 6, 83],
[ 8, 84],
[10, 85],
[12, 86],
[14, 87],
[16, 88],
[18, 89]])
Если вы предпочитаете использовать PIL / Pillow, это будет go примерно так:
from PIL import Image
import numpy as np
# Load image, ensure not palettised, and make into Numpy array
pim = Image.open('image.png').convert('RGB')
im = np.array(pim)
# Define the blue colour we want to find - PIL uses RGB ordering
blue = [0,0,255]
# Get X and Y coordinates of all blue pixels
X,Y = np.where(np.all(im==blue,axis=2))
print(X,Y)