北京印刷学院 20级轻工研究生 色彩管理学论文<手机相机自动白平衡评价与分析>。
通过Python编译,并基于tensorflow2.1, opencv4.1, numpy, scipy环境下Python3.8运行成功。
该脚本生成一个 rgb_set.txt 文本文档,包含每个色块提取平滑后的RGB值,并在控制台打印出HSV空间中的S和V值。
代码及数据可在此处下载
import numpy as np
# import os
import cv2 as cv
# import matplotlib.pyplot as plt
def imgshow(img):
cv.namedWindow('color_block',0)
cv.resizeWindow('color_block', 600, 600)
cv.imshow('color_block',img)
cv.waitKey(0)
# 色块分割类
class seg_img():
def __init__(self,segtuple):
self.segtuple = segtuple
self.segrow, self.segline = segtuple[0], segtuple[1]
# 所有块的大小
def img_seg(self,imgnp):
'''
将imgnp分割成指定数目的图像块,并存放在列表中
np.array :param imgnp: 待分割图像数组
tuple :param segtuple: 分割大小,如:(8,8)代表将图像分割为64块
list :return: 返回一个包含segtuple内乘个数的图像块列表
'''
block_row = np.array_split(imgnp, self.segrow, axis=0)
img_block = []
for i in block_row:
block_all = np.array_split(i,self. segline, axis=1)
img_block += block_all
return img_block
# 定义色块集合
rgbset = []
ori_color_file = open('Ori_data.txt','r',encoding='utf-8')
ori_color = ori_color_file.readlines()
ori_color_file.close()
del ori_color[0:2]
index = 0
for i in ori_color:
ori_color[index] =eval(i.replace('\t', ',').replace('\n', ' '))[3:]
index+=1
# 导入拍摄色卡
act_color1 = cv.imread('CWF_color.jpg')
# 色块分割
block_set = seg_img((4,6)).img_seg(act_color1)
f = open('rgb_set.txt','a')
# 中心点扩展与色块RGB均值提取
for i in range(24):
color = block_set[i]
info = color.shape
center = [int(info[0]/2),int(info[1]/2)]
h,w = int(info[0]/4),int(info[1]/4)
color = color[center[0]-h:center[0]+h,center[1]-w:center[1]+w]
color = cv.cvtColor(color,cv.COLOR_BGR2RGB)
info = color.shape
RGB = []
for j in range(3):
value = int(np.sum(np.sum(color[:,:,j]))/(info[0]*info[1]))
RGB.append(value)
f.write(str(RGB).strip('[]')+'\n')
rgbset .append(RGB)
f.close()
#计算V,S值
rgb = np.zeros([6,3])
V,S = [],[]
for i in rgbset[:18]:
S.append((max(i)-min(i))/max(i))
V.append(max(i))
print(S,V)