相关文章推荐
性感的卤蛋  ·  Could not build ...·  5 月前    · 
傻傻的香烟  ·  Azure 存储简介 - Azure ...·  1 年前    · 
笑点低的猴子  ·  python - cannot ...·  1 年前    · 

一、计算图片的饱和度、色调、明度的思路

  1. 首先用 opencv 或 PIL 读取图片,然后将图片转换到 HSV空间
  2. 调用 cv2.split() 方法将 H、S、V空间分别返回,然后将每个空间中 非0值累加 求均值 ,即得到 图片 的 **average_H,average_S,average_**V。

二、计算单张图片的 饱和度、色调、明度

##计算 单张图片的 色调(H),饱和度(S),明度(V),并返回 avg_H,avg_S,avg_V ##
def compute_HSV(img_path):
    image = cv2.imread(img_path)
    # get H,S,V value seperately
    hsv = cv2.cvtColor(image, cv2.COLOR_RGB2HSV)
    H, S, V = cv2.split(hsv)
    ## 明度(V)
    v = V.ravel()[np.flatnonzero(V)]   #亮度非零的值
    average_v  = sum(v)/len(v)
    ## 饱和度(S)
    s = S.ravel()[np.flatnonzero(S)]
    average_s  = sum(s)/len(s)
    ## 色调(H)
    h = H.ravel()[np.flatnonzero(H)]
    average_h  = sum(h)/len(h)
    # print('avg_H:{:.6f},\tavg_S:{:.6f},\t avg_V{:.6f}\t'.format(average_h,average_s,average_v))
    return average_h,average_s,average_v

三、计算一个图片文件夹下的饱和度、色相、明度值

## 计算文件夹中的所有图片的 avg_H,avg_S,avg_V,
## 并返回 [img_path,avg_H,avg_S,avg_V]四元组 ,avg_Hlist,avg_Slist,avg_Vlist ##
def compute_dir_HSV(root_path):
    I_pathHSV = [] # 便于获取 复合约束条件的 图片
    cls_dir = os.listdir(root_path)  # all image_name
    # all image_path
    img_path_list = [os.path.join(root_path, cls_dir[x]) for x in range(len(cls_dir))] 
    avg_Hlist,avg_Slist,avg_Vlist = [],[],[]
    for img_path in img_path_list:
        avg_H,avg_S,avg_V = compute_HSV(img_path)
        I_pathHSV.append([img_path,avg_H,avg_S,avg_V])
        avg_Hlist.append(avg_H)
        avg_Slist.append(avg_S)
        avg_Vlist.append(avg_V)
    return I_pathHSV,avg_Hlist,avg_Slist,avg_Vlist

四、绘制图片文件夹下的饱和度、色相、明度分布图

def draw_distribute_chart(root_path):
	# 调用上方写好的计算图片文件下的方法
    _, avg_Hlist, avg_Slist ,avg_Vlsit = compute_dir_HSV(root_path)
    sns.set_style("darkgrid") # 设置主题颜色
    chart_avg_H = avg_Hlist
    chart_avg_S = avg_Slist
    chart_avg_V = avg_Vlsit
    sns.distplot(chart_avg_H, color='g',label='avg_H') 
    sns.distplot(chart_avg_S, color='r',label='avg_S')
    sns.distplot(chart_avg_V, color='y',label='avg_V')
    plt.legend()
    plt.show() #不显示图时,加上此行代码

单个图片文件夹下图片的色相、饱和度、明度分布图在这里插入图片描述
(https://imgblog.csdnimg.cn/c129240dbd7048f99daa19c565e68d59.png#pic_center)

计算单个图片文件夹下所有图片的饱和度、色相、明度并绘制三种属性的分布图单个图片文件夹下图片的色相、饱和度、明度分布图(https://imgblog.csdnimg.cn/c129240dbd7048f99daa19c565e68d59.png#pic_center)
Photoshop 的色相/饱和度调整,可以对全图、红、黄、绿、青、蓝、洋红六个通道进行设置。每个通道可设置: 色相(hue), 饱和度(satuation), 明度(Lightness)三个调整值。 另包含 多个颜色空间转换函数
饱和度调整算法说明(完整python代码在文末): 本算法主要是利用HSL颜色空间进行饱和度S的上下限控制,对RGB空间进行补丁式调整。调整过程在RGB空间进行,其原理简单地说就是判断每个像素的R、G、B值是否大于或小于平均值,大于加上调整值,小于则减去调整值,如何计算各个像素点的调整系数是关键。本算法主体思想就是利用HSL来计算各点的调整系数。 算法过程如下: (参考CSDN博客:http...
获取蓝色在图片中所占百分比思路代码运行结果测试图片 由于每种颜色都有一个阈值,单纯的计算RGB百分比的效果并不好,对于这点,网上已经有很多结论。于是,我想到采用hsv空间下每个像素点分量,获取某种颜色所占百分比(我这里采用的是蓝色)。因为,在hsv空间下,相近颜色都会被归于一个范围。所以,我们可以比较相近颜色,在图片中,所占百分比。 #include<iostream> #include<opencv2/opencv.hpp> #include<iomanip&gt
Opencv图片像素操作的应用实例——计算图片某一种颜色区域大小所占比  From: https://www.cnblogs.com/changxiang/p/7533294.html   对图片进行处理,其中图片像素的处理是基本的过程,包括对图片像素的遍历,对每一个像素的RGB三个通道的灰度值的获取等。 以下是基于opencv 的一个应用实例,即计算图片中黄色区域大小占整个图片大小的比...
可以使用MATLAB中的rgb2hsv函数来提取出图片色调明度饱和度。该函数将RGB颜色空间转换为HSV颜色空间,其中H表示色调,S表示饱和度,V表示明度。以下是示例代码: img = imread('image.jpg'); hsv_img = rgb2hsv(img); hue = hsv_img(:,:,1); saturation = hsv_img(:,:,2); value = hsv_img(:,:,3); 这将提取出图片色调明度饱和度,并将它们存储在hue,saturation和value变量中。