python计算一、二、三阶颜色矩

首先读取图片数据,转化成矩阵格式:

from PIL import Image
import numpy as np

def getimage(path = path):
    #path为需要读取图片的路径
    img = Image.open(path)
    M,N = img.size
    r,g,b = img.split()
    rd = np.asarray(r)
    gd = np.asarray(g)
    bd = np.asarray(b)
    return rd,gd,bd

分别计算一二三阶颜色矩:

#r通道的一阶颜色矩
rd_1 = rd.mean()

#r通道的二阶颜色矩
rd_2 = rd.std()

#r通道的三阶颜色矩
#定义一个求三阶颜色矩的函数
def var(x=None):
    mid = np.mean(((x - x.mean()) ** 3))
    return np.sign(mid) * abs(mid) ** (1/3)

批量求一个文件夹下所有图片的各阶颜色矩:

import os

def getimagedata(path=path):
    filename = os.listdir(path)
    n = len(filename)
    data = np.zeros([n,9])
    for i in range(n):
            img = Image.open(path+'\\'+imagenames[i])
            M,N = img.size
            r,g,b = img.split()
            rd = np.asarray(r)
            gd = np.asarray(g)
            bd = np.asarray(b)
            data[i,0] = rd.mean();data[i,1] = gd.mean();data[i,2] = bd.mean()
            data[i,3] = rd.std();data[i,4] = gd.std();data[i,5] = bd.std()
            data[i,6] = self.var(rd);data[i,7] = self.var(gd);data[i,8] = self.var(bd)
        return data

猜你喜欢

转载自blog.csdn.net/spartanfuk/article/details/82082434