将文件夹中的图像根据明亮等级分类

需求:

不同的图像有不同的明亮等级,现有文件夹a,要将a中的图像(若干张)根据图像的明亮等级分为0-10,且自动分配到不同的文件夹中;如下图所示,图1为过度黑暗场景,图2为明亮场景;

主要工作:

将RGB到YUV空间的变化,计算Y值,并将Y值归一化,根据得到的等级进行分类;

文件目录:

illumination_test_images文件夹:存放需要分类的图像;

illumination-level.txt:用来存放每张图像的明亮等级;

illumination-test.py:主要执行文件;

resuts文件夹:代表着不同的光照等级,illumination_test_images文件夹中的图像会分配到以下11个文件夹中;

         0文件夹:子文件夹

         1文件夹:子文件夹

         2文件夹:子文件夹

         ......

         10文件夹:子文件夹

illumination-test.py代码:

import os
import sys
import cv2
import shutil

def getTheBright(path):
	"""
	求取图像的亮度值
	:param path: 输入图像路径
	:return: 返回该图像亮度值
	"""
	img=cv2.imread(path)
	b, g, r = cv2.split(img)

	avg_b = 0
	avg_g = 0
	avg_r = 0

	sum_b = 0
	sum_g = 0
	sum_r = 0

	for i in range(0, b.shape[0]):
		for j in range(0, b.shape[1]):
			sum_b += b[i][j]
			sum_g += g[i][j]
			sum_r += r[i][j]

	avg_b = int(sum_b/b.shape[0]/b.shape[1])
	avg_g = int(sum_g/g.shape[0]/g.shape[1])
	avg_r = int(sum_r/r.shape[0]/r.shape[1])

	y = int(0.3*avg_r+0.59*avg_g+0.11*avg_b)
	return y

def getTheYvalue():
	"""
	获得文件夹下所有图像的Y值
	:return:
	"""
	original_path = "./illumination_test_images/"
	files = os.listdir(original_path)
	all_Y = []
	fp = open("./illumination-level.txt", "w")
	for i in range(0, len(files)):
		y = getTheBright(original_path+files[i])
		print(y)
		all_Y.append(y)
		fp.write(str(y)+"\n")
	fp.close()

def readTextGetYvalue():
	"""
	得到txt文件中的所有Y值
	:return:
	"""
	fp = open("./illumination-level.txt","r+")
	Y = fp.readlines()
	y_value = []
	for line in Y:
		line = line.rstrip("\n")
		y_value.append(int(line))
	print(y_value)
	max_y = max(y_value)
	min_y = min(y_value)
	print(max_y)
	print(min_y)
	for i in range(len(y_value)):
		y_value[i] = int((y_value[i]-min_y)/(max_y-min_y)*10)
	print(y_value)
	return y_value

def moveTheOriImageToRightIllumination():
	"""
	根据illumination-level.txt中的结果将illumination_test_images中的图像分配到0-10种亮度等级中
	:return:
	"""
	y_value = readTextGetYvalue()
	ori_path = "./illumination_test_images/"
	dst_path = "./results/"

	img_files = os.listdir(ori_path)
	for i in range(0, len(y_value)):
		print(i)
		shutil.copy(ori_path+img_files[i], dst_path+str(y_value[i]))

if __name__ == '__main__':
	getTheYvalue()	# 获取图像亮度,写入illumination-level.txt
	moveTheOriImageToRightIllumination() # 移动图像

执行后的results文件夹:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值