найти соответствие между двумя регионами на основе сравнения цветов - PullRequest
0 голосов
/ 22 сентября 2019

Я пишу код для сравнения цвета эталонного изображения с фактическим цветом изображения в определенной области на основе кортежа красного, зеленого, синего цвета эталонного изображения, который используется в качестве эталона для сравнения, например (128,128,128), допускнасколько далеко от эталонного цвета может быть каждый компонент RGB, и все еще считается совпадение (8,8,8) и плоскостность в пределах области, например, 90% по отношению к фактическому изображению

1. Моей первой задачей является вычислениесредняя r, g, b цветовая составляющая тестовой области

(1251, 532, 589, 82)

для этого я написал ниже псевдокод, который дает мневыводится как

(217, 15, 28)

enter image description here

import cv2
from PIL import Image
import math
import numpy as np

class CompareColor(object):
  ''' loop through each pixel and average rgb '''
  def __init__(self, imageName):
      self.pic = Image.open(imageName)
      # load image data
      self.imgData = self.pic.load()
      pixel_values = list(self.pic.getdata())
      print(pixel_values)

  def color(self):
      r, g, b = 0, 0, 0
      count = 0
      for x in range(self.pic.size[0]):
          for y in range(self.pic.size[1]):
              tempr,tempg,tempb = self.imgData[x,y]
              r += tempr
              g += tempg
              b += tempb
              count += 1
      # calculate averages
      return math.ceil(r/count), math.ceil(g/count), math.ceil(b/count)

class ColorTest:
    def __init__(self):
        self.actualImgPath = "/home/color/youtube.png"
        self.includedAreas = (1251, 532, 589, 82)


    def findActualRGBComponent(self):
        actualImg = cv2.imread(self.actualImgPath)
        Y1 = self.includedAreas[1]
        Y2 = Y1 + self.includedAreas[3]
        X1 = self.includedAreas[0]
        X2 = X1 + self.includedAreas[2]
        crop_image = actualImg[Y1:Y2, X1:X2].copy()
        status = cv2.imwrite('//home//color//crop.png', crop_image)
        img_file = '//home//color//crop.png'
        pc = CompareColor(img_file)
        print('color', pc.color())

if __name__ == "__main__":
    colTest = ColorTest()
    colTest.findActualRGBComponent()
Моя вторая задача - найти плоскость цвета, которая означает, насколько ровный цвет - есть ли большие различия в интересующей области в диапазоне 0-100, где 100 - идеальный один цвет, но я не могу понятькак реализовать эту логику.Может ли кто-нибудь, пожалуйста, помогите мне

1 Ответ

0 голосов
/ 22 сентября 2019

Вы должны проверить этот ответ о доминирующих цветах изображения, потому что нахождение среднего значения для этого конкретного изображения не имеет практического значения, среднего цвета не существует нигде на изображении: Как найти средний цветизображение в Python с OpenCV?

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

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