色彩学实验-白平衡论文相关代码

本研究针对手机相机自动白平衡效果进行评估与分析,利用Python编程实现图像处理,基于TensorFlow2.1、OpenCV4.1等工具,对色卡图片进行分割并提取各色块的RGB值,最终计算HSV空间中的S和V值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

北京印刷学院 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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曹栩珩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值