查看原文
其他

OpenCV:计算图片有多色

2017-09-03 大邓 大邓带你玩python

计算图片色彩丰富度

首先我们要有一个色彩丰富度的标准。Hasler and Süsstrunk的研究将颜色丰富度划分为7级。

  1. 无(Not colorful)

  2. 稍微(Slightly colorful)

  3. 适度(Moderately colorful)

  4. 平均(Averagely colorful)

  5. 非常(Quite colorful)

  6. 高度(Highly colorful)

  7. 极端(Extremely colorful)

Hasler and Süsstrunk找了20个人对84副图片按照1-7分进行打分。最后对这份调查数据进行分析,发现图片颜色丰富度有如下计算公式。

  最后的C就是图片颜色丰富度的指示变量(其中sigma和miu分别代表标准差和平均值)。

代码

import cv2
import numpy as np

def image_colorfulness(image):    #将图片分为B,G,R三部分(注意,这里得到的R、G、B为向量而不是标量)    (B, G, R) = cv2.split(image.astype("float"))    #rg = R - G    rg = np.absolute(R - G)    #yb = 0.5 * (R + G) - B    yb = np.absolute(0.5 * (R + G) - B)    #计算rg和yb的平均值和标准差    (rbMean, rbStd) = (np.mean(rg), np.std(rg))    (ybMean, ybStd) = (np.mean(yb), np.std(yb))    #计算rgyb的标准差和平均值    stdRoot = np.sqrt((rbStd ** 2) + (ybStd ** 2))    meanRoot = np.sqrt((rbMean ** 2) + (ybMean ** 2))    # 返回颜色丰富度C    return stdRoot + (0.3 * meanRoot)

image = cv2.imread('图片路径')  
print(image_colorfulness(image))

运行

#返回图片的丰富度值(0-100)

例子

8.81639958442


52.4526883019


58.1654462546

66.7193517479

67.7661048368

89.8174301858(哈哈,最亮的是打赏小程序码。)

苹果用户也可以打赏了,长按上面小程序码,即可支持大邓。

刚刚试了小程序码,可以给大邓发鸡毛信哦,千里送鸡毛,礼轻情意重。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存