最近在工作中需要求出大量图片的均值与方差,然后对于图片在训练前,做标准化处理。在网上搜索了一部分代码,但应用起来并不是很方便,要不就是运算出错,要不就是运行速度非常慢。所以在参考他人的方法基础上,自己直接写了一个基于Numpy和CV2的脚本,效果还不错。附上代码如下:
# -*- coding: utf-8 -*- """ Created on Thu Nov 1 10:43:29 2018 @author: Administrator """ import os import cv2 import numpy as np path = r'D:\your\picture\save\path' #图片保存路径 def compute(path): file_names = os.listdir(path) per_image_Rmean = [] per_image_Gmean = [] per_image_Bmean = [] for file_name in file_names: img = cv2.imread(os.path.join(path, file_name), 1) per_image_Bmean.append(np.mean(img[:, :, 0])) per_image_Gmean.append(np.mean(img[:, :, 1])) per_image_Rmean.append(np.mean(img[:, :, 2])) R_mean = np.mean(per_image_Rmean)/255 G_mean = np.mean(per_image_Gmean)/255 B_mean = np.mean(per_image_Bmean)/255 stdR = np.std(per_image_Rmean)/255 stdG = np.std(per_image_Gmean)/255 stdB = np.std(per_image_Bmean)/255 return R_mean, G_mean, B_mean, stdR, stdG, stdB if __name__ == '__main__': R, G, B, stdR, stdG, stdB, Bmean, Rmean, Gmean = compute(path) print("B= ", R, "G= ", G, "R=", B, "stdB = ", stdR, "stdG = ", stdG, "stdR =", stdB)在使用前辈的代码后发现,24000+张图片,计算均值和标准差差不多需要10分钟,而且有的代码计算结果还是错误的。所以干脆自己写了这个脚本,24000多张,1分钟左右就出结果。在此分享给有需要的朋友。