Найти координаты на изображении, где обнаружен указанный цвет (Python) - PullRequest
0 голосов
/ 04 февраля 2020

Я пытаюсь создать программу, которая берет изображение и просматривает его по всему изображению, чтобы найти цвет, скажем синий, и выдать координаты этой точки на изображении, которое имеет этот цвет.

Ответы [ 2 ]

3 голосов
/ 04 февраля 2020

Вы можете сделать это очень просто с Numpy, что лежит в основе большинства библиотек обработки изображений в Python, таких как OpenCV , или skimage , или Wand . Здесь я сделаю это с OpenCV , но вы также можете использовать любой из вышеперечисленных или PIL / Pillow.

Используя это изображение с синей линией справа:

enter image description here

#!/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)
0 голосов
/ 04 февраля 2020

Для этого вам понадобится несколько фрагментов информации, включая высоту и ширину изображения в пикселях, а также цветовую карту изображения. Ранее я делал нечто похожее на это и использовал PIL (Pillow) для извлечения значений цвета каждого отдельного пикселя. Используя этот метод, вы сможете переформатировать значения цвета пикселей в двумерный массив (массив [x] [y], где x - координата x, а y - координата y, для удобства сравнения) и сравнить отдельные значения пикселей с указанным значением RGB.

Если у вас есть изображение неизвестной высоты и ширины, вы можете сделать следующее, чтобы получить высоту и ширину изображения:

from PIL import Image

image = Image.open('path/to/file.jpg')
width, height = image.size

После Таким образом, вы можете использовать следующее для получения значений цвета пикселя в формате RGB в списке:

pixval = list(image.getdata())

temp = []
hexcolpix = []
for row in range(0, height, 1):
    for col in range(0, width, 1):
        index = row*width + col
        temp.append(pixval[index])
    hexcolpix.append(temp)
    temp = []

Затем вы можете сделать сравнение, чтобы найти пиксели, которые соответствуют указанному вами цвету

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...