将所有的图片根据亮度值分成4个区间,能看出不同的亮度值对模型的影响。比如有的论文按80,130将图片分为Low,Middle和High。
from PIL import Image, ImageStat
import math
import os
import matplotlib.pyplot as plt
import numpy as np
import cv2
import shutil
def brightness(im_file):
im = Image.open(im_file)
stat = ImageStat.Stat(im)
r, g, b = stat.mean
return math.sqrt(0.241 * (r ** 2) + 0.691 * (g ** 2) + 0.068 * (b ** 2))
# def illumination_averge(directory_name):
# illumination_averge = []
# for filename in os.listdir(directory_name):
# # 用os库读取文件夹内所有图片名称以操作
# # print(filename)
# # img = Image.open(directory_name + "/" + filename)
# im_file = directory_name + "/" + filename
# illumination_averge.append(brightness(im_file))
# return illumination_averge
def makesDir(filepath): #判断如果文件不存在,则创建
if not os.path.exists(filepath):
os.makedirs(filepath)
def illumination_averge(directory_name):
real_query_20='/home/xl/workstation/Datasets/Real_Dataset/real_query_20'
real_query_40 = '/home/xl/workstation/Datasets/Real_Dataset/real_query_40'
real_query_60 = '/home/xl/workstation/Datasets/Real_Dataset/real_query_60'
real_query_80 = '/home/xl/workstation/Datasets/Real_Dataset/real_query_80'
makesDir(real_query_20)
makesDir(real_query_40)
makesDir(real_query_60)
makesDir(real_query_80)
for filename in os.listdir(directory_name):
# 用os库读取文件夹内所有图片名称以操作
# print(filename)
# img = Image.open(directory_name + "/" + filename)
im_file = directory_name + "/" + filename
im_file_b = brightness(im_file)
# from IPython import embed
# embed()
# if im_file_b<30:
# shutil.copy(os.path.join(directory_name, filename),os.path.join(real_query_30, filename))
# elif im_file_b>30 and im_file_b<60:
# shutil.copy(os.path.join(directory_name, filename), os.path.join(real_query_60, filename))
# else:
# shutil.copy(os.path.join(directory_name, filename), os.path.join(real_query_90, filename))
if im_file_b < 20:
shutil.copy(os.path.join(directory_name, filename),os.path.join(real_query_20, filename))
elif im_file_b>20 and im_file_b<40:
shutil.copy(os.path.join(directory_name, filename), os.path.join(real_query_40, filename))
elif im_file_b > 40 and im_file_b < 60:
shutil.copy(os.path.join(directory_name, filename), os.path.join(real_query_60, filename))
elif im_file_b > 60:
shutil.copy(os.path.join(directory_name, filename), os.path.join(real_query_80, filename))
def draw_hist(directory_name):
illumination_averges = illumination_averge(directory_name)
# plt.figure(figsize=(15,5))
# nums,bins,patches = plt.hist(illumination_averges,bins=20,edgecolor='k') #bins:区间个数 ,nums:这个参数是指定每个bin(箱子)分布的数据,对应x轴,pathes
# plt.xlabel("Illumination")
# plt.ylabel("Image Numbers")
# from IPython import embed
# embed()
# from IPython import embed
# embed()
# for num,bin in zip(nums,bins):
# plt.annotate(num,xy=(bin,num),xytext=(bin,num))
# plt.show()
if __name__ == '__main__':
directory_name = '/home/xl/workstation/Datasets/Real_Dataset/real_query'
draw_hist(directory_name)