百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

让颜色更加饱满和有冲击力:图像颜色校正

toqiye 2024-12-08 18:54 8 浏览 0 评论

大家拍照或图片时,获取会遇到图像颜色与实际颜色存在色差的现象。我们看一个标准色卡的图片:


第一张图片就是有色差的图片,这种现象一般是相机或光线的原因造成的,我们可以通过标准色卡进行校正。

第一张图片是有色差的图片拍摄的标准色卡图片,第二张是标准色卡的正常图片,其实我们只要拿到两张色卡的颜色转换关系就可以解决这个问题了。

当然,我们的第一张色卡有些畸变,最好做一个校正,我这里为了演示效果没有做这方面的处理。但白平衡时必须的:


### 白平衡演示代码:
def image_balance(imagefile):
    src = cv2.imread(imagefile)
    src_copy = src.copy()
    b, g, r = cv2.split(src)
    r_avg = cv2.mean(r)[0]
    g_avg = cv2.mean(g)[0]
    b_avg = cv2.mean(b)[0]

    # 求各个通道所占增益
    k = (r_avg + g_avg + b_avg) / 3
    kr = k / r_avg
    kg = k / g_avg
    kb = k / b_avg

    r = cv2.addWeighted(src1=r, alpha=kr, src2=0, beta=0, gamma=0)
    g = cv2.addWeighted(src1=g, alpha=kg, src2=0, beta=0, gamma=0)
    b = cv2.addWeighted(src1=b, alpha=kb, src2=0, beta=0, gamma=0)

    balance_img = cv2.merge([b, g, r])
    imgs = np.hstack([src_copy, balance_img])

    cv2.namedWindow("imgs",0)
    cv2.imshow("imgs",imgs)
    cv2.waitKey(0)

def image_balance_v2(imagefile):
    src = cv2.imread(imagefile)
    src_copy = src.copy()


    final = cv2.cvtColor(src,cv2.COLOR_BGR2LAB)
    avg_a = np.average(final[:, :, 1])
    avg_b = np.average(final[:, :, 2])

    for x in range(final.shape[0]):
        for y in range(final.shape[1]):
            l,a,b = final[x,y,:]
            l *=100/255.0
            final[x, y, 1] = a - ((avg_a - 128)*(l/100)*1.1)
            final[x, y, 2] = b - ((avg_b - 128) * (l / 100) * 1.1)

    final = cv2.cvtColor(final,cv2.COLOR_LAB2BGR)

    imgs = np.hstack([src_copy, final])
    cv2.namedWindow("imgs", 0)
    cv2.imshow("imgs", imgs)
    cv2.waitKey(0)


最后我选择完美反射算法进行白平衡处理。再接下来就是对两张色卡图片进行拟合,获得转换系数,这个很简单就不具体说了,拟合效果如下:


#### 颜色校准方法测试:
url_path = "https://img2.baidu.com/it/u=3233561313,355379518&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=375"
src = url2img(url_path)
image_color_correction(src) 

下面看一下具体结果:

示例1:

示例2:


示例3:

示例4:

相关推荐

国产web端开源ui组件-通用前端ui界面组件库

写个序吧:随着工作的不断深入,越来越发现很多好的前端开源项目都来自于国外,国产的开源项目很多时候面临叫好不叫座甚至有很多就消失不见了。开源和创新,不仅仅是需要我们的参与同样也需要我们不断地传播,因此才...

微信小程序商城项目,包括,分销,团购,秒杀,优惠券惠源码分享

源码获取,关注转发文章之后私信回复【源码】即可免费获取到!小程序商城,包括:分销(支持三级)、团购(拼多多模式)、秒杀、优惠券、等功能技术框架核心框架:SpringFramework4安全框架:A...

VUE3前端开发入门系列教程

一直以来使用ThinkJS开发,使用Semantic-UI手写代码,又缺少一些table等插件,好累。平时使用NodeJS开发后端较多,一直有接触VUE想法,总是不得入门(可能是思维固化了),再次深入...

支持分销、团购、秒杀、优惠券、微信商城项目,源码免费分享

小程序商城,包括:分销(支持三级)、团购(拼多多模式)、秒杀、优惠券、等功能如果您需要用到这个微信小程序的源码,欢迎关注转发之后私信【源码】来免费获取到!面向对象Open-Shop是企业在创立初期很好...

在Gitee获8.5k Star,做微信小程序商城看这一个开源项目就够了

商城系统是小程序中比较热门的类型,许多开发者在寻找商城类小程序项目时,都会遇到一些声称「开源」但是并不是完全开源,有时候还会收费的项目。今天Gitee介绍的这款微信小程序商城项目就是一款从前端到后...

七款国内免费开源PHP CMS推荐,无限制,可商用

自织梦cms收费后,很多使用dedecms的站长都转移到了别的cms系统上,上一期也给大家分享了几款国外开源cms系统,今天来给大家分享几款国内的免费且可商用的phpcms系统:PbootCmsPb...

VUE3前端开发入门系列教程二:使用iView框架辅助开发

1、安装iView新框架,支持VUE3npminstallview-ui-plus2、编辑src/main.js,添加以下内容,导入js和css到项目importViewUIPlusfrom...

TS 真正比 JS 强大的那些特性

在前端开发领域,JavaScript(JS)一直是当之无愧的武林盟主,凭借灵活多变的特性和超广泛的兼容性打下大片江山。然而,随着前端应用日益复杂,TypeScript(TS)这位后起之秀崛起,以独特优...

自写一个函数将js对象转为Ts的Interface接口

如今的前端开发typescript已经成为一项必不可以少的技能了,但是频繁的定义Interface接口会给我带来许多工作量,我想了想如何来减少这些非必要且费时的工作量呢,于是决定写一个函数,将对象放进...

如何优雅地校验后端接口数据,不做前端背锅侠

背景最近新接手了一批项目,还没来得及接新需求,一大堆bug就接踵而至,仔细一看,应该返回数组的字段返回了null,或者没有返回,甚至返回了字符串"null"???这我能忍?我立刻截...

正点原子I.MX6U嵌入式Linux C应用编 第十八章 输入设备应用编程

输入设备应用编程本章学习...

Python时间序列分析:使用TSFresh进行自动化特征提取

TSFresh(基于可扩展假设检验的时间序列特征提取)是一个专门用于时间序列数据特征自动提取的框架。该框架提取的特征可直接应用于分类、回归和异常检测等机器学习任务。TSFresh通过自动化特征工程流程...

人教版八下数学第十九章《一次函数》辅导(6)一次函数(1)

人教版八下数学第十九章《一次函数》辅导(6)一次函数(1)一、生活中的一次函数探究1(1)一个小球由静止开始沿一个斜坡向下滚动,其速度每秒增加2m/s,若小球的速度为vm/s,运动时间为ts,求v关于...

笔记|Simulink中S函数的设计

S函数的简介S函数是Simulink中提供给用户的一个自定义模块,由于在研究过程中经常需要复杂的算法设计,Simulink中提供的模块无法满足使用,就需要用编程的形式设计出S函数模块,然后嵌入到系统中...

初探HarmonyOS开发,ArkTS语言初看

最近在研究HarmonyOS(鸿蒙操作系统)开发,HarmonyOS(鸿蒙操作系统)想必大家都不陌生了,但是我也是在该系统发布许久后才首次尝试上手开发,因为有写java后台的经验,也算是能堪堪上手。据...

取消回复欢迎 发表评论: