Определить цвет в середине изображения (OpenCV, Python) - PullRequest
0 голосов
/ 04 мая 2018

У меня есть эти 3 изображения (рассмотрим «изображение» всего квадрата, а не только фигуру внутри - это только для демонстрационных целей):

im1 im2 im3

Что я хочу сделать, это определить цвет в середине (в центре) каждого из них. Таким образом, имея область (квадрат или круг) в центре и с помощью OpenCV определите, какой это цвет. Что-то вроде палитры цветов ...

Цель состоит в том, чтобы иметь 3 значения по 3 для каждого изображения (BGR).

Пример:

im4

Какой цвет в области интереса?

Спасибо

EDIT

Используя этот код, я могу найти середину изображения и применить маску.

import cv2
import numpy as np

img = cv2.imread("im2.png")

height, width, depth = img.shape
circle_img = np.zeros((height, width), np.uint8)

mask = cv2.circle(circle_img, (int(width / 2), int(height / 2)), 20, 1, thickness=-1)
masked_img = cv2.bitwise_and(img, img, mask=circle_img)

cv2.imshow("masked", masked_img)
cv2.waitKey(0)

Теперь осталось найти BGR маскируемой области (видимой ...)

Ответы [ 5 ]

0 голосов
/ 04 мая 2018

Это позволит найти значение RGB пикселя в центре изображения с помощью OpenCV.

import cv2
import numpy as np

img = cv2.imread("image.png")

height, width, depth = img.shape
circle_img = np.zeros((height, width), np.uint8)

mask = cv2.circle(circle_img, (int(width / 2), int(height / 2)), 1, 1, thickness=-1)
masked_img = cv2.bitwise_and(img, img, mask=circle_img)

circle_locations = mask == 1
bgr = img[circle_locations]

rgb = bgr[..., ::-1]

print(rgb)

Источник

0 голосов
/ 04 мая 2018
import cv2
import numpy as np

img = cv2.imread('image.png')
height, width = img.shape[:2]
# Change these values to fit the size of your region of interest
roi_size = 10 # (10x10)
roi_values = img[(height-roi_size)/2:(height+roi_size)/2,(width-roi_size)/2:(width+roi_size)/2]
mean_blue = np.mean(roi_values[:,:,0])
mean_green = np.mean(roi_values[:,:,1])
mean_red = np.mean(roi_values[:,:,2])

print("R: {}  G: {}  B: {}").format(mean_red, mean_green, mean_blue)  
0 голосов
/ 04 мая 2018

Использование подушки:

from PIL import Image

im = Image.open(path_to_image)

width, height = im.size #get image size

#since you do not specify the size of the center area in the question, just replace the below variables with what you want
left = (width - your_width)/2
top = (height - your_height)/2
right = (width + your_width)/2
bottom = (height + your_height)/2

im.crop((left, top, right, bottom)) #crop the center of the image

rgb = im.convert('RGB') # get three R G B values
r, g, b = rgb.getpixel((1, 1))

print(r,g,b)

В OpenCV замените две первые строки на:

im = cv2.imread(path_to_image)
height, width = im.shape[:2]
0 голосов
/ 04 мая 2018

У вас есть изображение размером ш х ч. Предположим, что значение roi составляет 11 пикселей на сторону, поэтому смещение = 5

Доступ к пикселю от (w / 2 - ширина / 2, h / 2 - высота / 2) до (w / 2 + ширина / 2, h / 2 + высота / 2).

Затем вычислите среднее значение для всех извлеченных пикселей (чтобы вы были более устойчивы к изменению цвета).

Конечно, вы можете изменить цветовое пространство, если хотите, чтобы оно было другого цвета, в зависимости от типа изображения, которое вы собираетесь анализировать.

0 голосов
/ 04 мая 2018

Убедитесь, что изображение PhotoImage, вычислите среднюю точку и выберите цвета:

r,g,b = image.get(x, y)
...