Я пытаюсь выяснить, является ли фон цветным или монохромным - PullRequest
0 голосов
/ 17 июня 2019

Я пытаюсь выяснить, является ли фон цветным или монохромным

Я делаю объект на переднем плане черным. Я не смог найти способ выяснить, является лифон - цветной или монохромный

1 Ответ

1 голос
/ 17 июня 2019

Перво-наперво, у вашего кода есть пара проблем:

  1. Ваш ROI (rect) больше, чем изображение, и только первые 7 строк используются в качестве фона. Возможно, вы захотите определить более точную рентабельность инвестиций или использовать вместо этого режим GC_EVAL
  2. Вы извлекаете передний план вместо фона в:

    mask = np.where((mask == 3) | (mask == 1), 0, 1).astype('uint8') img = img*mask[:, :, np.newaxis]

  3. Вас интересует цвет изображения, но вы загружаете изображение как черно-белое в

    resim = cv2.imread("histogram.jpg", 0)

Поскольку вас действительно интересует только насыщенность (то есть количество «цветов» в пикселях), вам следует преобразовать ваше изображение из цветового пространства BGR в пространство HSV и создать гистограмму канала насыщения. На самом деле вам, вероятно, не нужна гистограмма, и вы можете использовать простой порог:

img = img*mask[:, :, np.newaxis]
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
saturation_threshold = 20 # try different thresholds to see which value works for you
ratio = numpy.count_nonzero(hsv[:,:,1] > saturation_threshold ) / numpy.count_nonzero(mask)

ratio будет количеством пикселей, которые не являются оттенками серого

...