Python 基于颜色比较查找两个区域之间的匹配

Python 基于颜色比较查找两个区域之间的匹配,python,opencv,python-imaging-library,Python,Opencv,Python Imaging Library,我正在编写代码,根据参考图像颜色元组,将参考图像颜色与特定区域中的实际图像颜色进行比较。红色、绿色、蓝色分量用作比较的参考颜色,例如(128128),每个RGB分量与参考颜色的距离公差(8,8,8)和区域内的平面度,例如90%wrt到实际图像 1.我的第一项任务是计算测试的平均r、g、b颜色分量 区域 (125153258982) 为此,我写了下面的伪代码 把我当作 (217、15、28) 我的第二个任务是找到颜色的平坦度,这意味着颜色有多平坦-在0-100范围内,感兴趣的区域是否有很大的变化

我正在编写代码,根据参考图像颜色元组,将参考图像颜色与特定区域中的实际图像颜色进行比较。红色、绿色、蓝色分量用作比较的参考颜色,例如(128128),每个RGB分量与参考颜色的距离公差(8,8,8)和区域内的平面度,例如90%wrt到实际图像

1.我的第一项任务是计算测试的平均r、g、b颜色分量 区域

(125153258982)

为此,我写了下面的伪代码 把我当作

(217、15、28)

  • 我的第二个任务是找到颜色的平坦度,这意味着颜色有多平坦-在0-100范围内,感兴趣的区域是否有很大的变化,其中100是完美的单色,但我无法找出如何实现这一逻辑。谁能帮帮我吗

  • 您应该检查关于图像主色调的回答,因为在特定图片上查找平均值没有实际意义,平均颜色在图片上的任何位置都不存在:


    一旦你使用了主色,你就可以很容易地回答第二个问题,关于
    平直度
    或其他什么——因为你目前发现的平均颜色在图片上并不存在,所以对于不存在的颜色,
    平直度
    可以是一个任意数。

    对不起,但是你的方法从根本上是有缺陷的。找到平均颜色不是很有用。你到底想做什么?如果你能退一步解释一下,你可能会得到更好的建议。你为什么想找到相似之处?在什么之间?为了什么?你知道你的图片上有什么限制可以帮助你把问题简化成更简单的事情吗。。。e、 g.颜色的最大数量,选择它们的调色板,或者它们是只有32种颜色的GIF?这篇文章应该非常适用于您的情况。。。我想根据参考图像颜色元组,将参考图像颜色与特定区域中的实际图像颜色进行比较。红色、绿色、蓝色分量用作比较参考,例如(128128)、公差(8,8,8)区域内的平面度,例如90%与实际图像相对应感谢您对我的评论的回复,但我一点也不知道。我不知道你真正想要实现什么。请问您的图片与您的问题有何关联?我想将signin选项周围的红色区域与实际图片进行比较
    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()