определить средний цвет данного кругового образца изображения? - PullRequest
0 голосов
/ 11 декабря 2019

То, чего я пытаюсь достичь, похоже на инструмент пипетки Photoshop / GIMP: возьмите круглый образец определенной области на изображении и верните средний цвет этого кругового образца.

Самый простой метод, который у меня естьОбнаружено, что нужно взять «обычный» квадратный образец, замаскировать его в виде круга, а затем уменьшить его до 1 пикселя, но это требует очень много ресурсов процессора (особенно при повторении в миллионы раз).

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

Есть ли более лаконичные, менее требовательные к ЦП средства для достижения этой цели?

1 Ответ

2 голосов
/ 12 декабря 2019

Вот небольшой пример skimage.draw.circle(), который на самом деле не рисует круг, но дает вам координаты точек внутри круга, которые можно использовать для индексации массивов Numpy с помощью.

#!/usr/bin/env python3

import numpy as np
from skimage.io import imsave
from skimage.draw import circle

# Make rectangular canvas of mid-grey
w, h = 200, 100
img = np.full((h, w), 128, dtype=np.uint8)

# Get coordinates of points within a central circle
Ycoords, Xcoords = circle(h//2, w//2, 45)

# Make all points in circle=200, i.e. fill circle with 200
img[Ycoords, Xcoords] = 200

# Get mean of points in circle
print(img[Ycoords, Xcoords].mean())      # prints 200.0

# DEBUG: Save image for checking
imsave('result.png',img)

enter image description here

Ключевые слова : Numpy, лыжный маг, scikit-изображение, обработка изображений, Python, круг, рисование, координаты точек внутри круга, среднее значение в маске.

...