【实用代码片段】从原图像到目标图像的颜色迁移

  • 代码
def color_transfer(sc, dc):"""Transfer color distribution from of sc, referred to dc.Args:sc (numpy.ndarray): input image to be transfered.dc (numpy.ndarray): reference image Returns:numpy.ndarray: Transferred color distribution on the sc."""def get_mean_and_std(img):x_mean, x_std = cv2.meanStdDev(img)x_mean = np.hstack(np.around(x_mean, 2))x_std = np.hstack(np.around(x_std, 2))return x_mean, x_stdsc = cv2.cvtColor(sc, cv2.COLOR_BGR2LAB)s_mean, s_std = get_mean_and_std(sc)dc = cv2.cvtColor(dc, cv2.COLOR_BGR2LAB)t_mean, t_std = get_mean_and_std(dc)img_n = ((sc-s_mean)*(t_std/s_std))+t_meannp.putmask(img_n, img_n > 255, 255)np.putmask(img_n, img_n < 0, 0)dst = cv2.cvtColor(cv2.convertScaleAbs(img_n), cv2.COLOR_LAB2BGR)return dst
  •  函数解释

这是一个颜色迁移函数,用于将输入图像 sc 的颜色分布转移到参考图像 dc 上。该函数使用 LAB 颜色空间进行颜色迁移。

函数的主要步骤如下:

  1. 将输入图像 sc 和参考图像 dc 转换为 LAB 颜色空间。

  2. 计算输入图像 sc 和参考图像 dc 的均值和标准差。

  3. 使用颜色迁移公式 (sc-s_mean)*(t_std/s_std))+t_mean 进行颜色迁移。

  4. 将结果图像的像素值限制在合理范围内(0到255之间)。

  5. 最后,将结果从 LAB 颜色空间转换回到 BGR 颜色空间。

这个函数可以用于使输入图像的颜色分布与参考图像相匹配。你可以将输入图像 sc 替换为你想要进行颜色迁移的图像,将参考图像 dc 替换为参考的图像。调用这个函数会返回颜色迁移后的图像。

  •  讨论

为什么要将图像从BGR转换为LAB?

LAB(CIELAB)颜色空间是一种在计算机视觉和图形学中常用的颜色表示方式。它是一种设备无关的颜色空间,被设计用于更好地模拟人眼对颜色的感知。

LAB颜色空间有三个分量:

  1. L(亮度):表示像素的亮度,范围是0到100。较大的L值表示较亮的颜色。

  2. a(从绿到红):表示颜色的绿到红分量,范围是-128到127。负值表示绿色,正值表示红色。

  3. b(从蓝到黄):表示颜色的蓝到黄分量,范围是-128到127。负值表示蓝色,正值表示黄色。

在LAB颜色空间中,色彩信息被分离到a和b通道,而亮度信息则存储在L通道。这种分离使得LAB颜色空间更适合于颜色校正和颜色迁移等应用。

对于颜色迁移函数中的 cv2.cvtColor(sc, cv2.COLOR_BGR2LAB)cv2.cvtColor(dc, cv2.COLOR_BGR2LAB),它们分别将输入图像和参考图像从BGR颜色空间转换到LAB颜色空间,以便进行颜色迁移计算。最后的cv2.cvtColor(cv2.convertScaleAbs(img_n), cv2.COLOR_LAB2BGR)则将颜色迁移后的图像从LAB颜色空间转换回BGR颜色空间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/598431.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

23级第一次测试总结

前天进行了第一次测试&#xff0c;一共10道题只写出来6道题&#xff0c;题目本身难度不大&#xff0c;基本没什么算法&#xff0c;除了最后两道题目考察了双指针&#xff08;滑动窗口&#xff09;和深度搜索&#xff0c;但也仅仅只写出来了6道&#xff0c;还是太菜了 对于题目…

2023 IoTDB Summit:清华大学软件学院长聘副教授龙明盛《IoTDB 新组件:内生机器学习》...

12 月 3 日&#xff0c;2023 IoTDB 用户大会在北京成功举行&#xff0c;收获强烈反响。本次峰会汇集了超 20 位大咖嘉宾带来工业互联网行业、技术、应用方向的精彩议题&#xff0c;多位学术泰斗、企业代表、开发者&#xff0c;深度分享了工业物联网时序数据库 IoTDB 的技术创新…

Day21- 回溯算法part01

一、组合 题目一&#xff1a;77. 组合 77. 组合 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案 combine 函数初始化结果变量和当前组合变量&#xff0c;然后调用 backtrack 函数来生成所有组合。backtrack 函数…

中国区县绿地曝光率数据,shp+excel格式,区县精度

基本信息. 数据名称: 中国区县绿地曝光率数据 数据格式: shpexcel 数据精度&#xff1a;区县 数据几何类型: —— 数据坐标系: WGS84坐标系 数据来源&#xff1a;网络公开数据 字段列表&#xff1a; 序号字段名称字段说明1xzqhdm_3区县代码2xzqhmc_3区县名称4xzqhm…

【2023年度总结】蜕变与挑战

2023年是意义重大的一年&#xff0c;这一年里&#xff0c;我从大三到了大四&#xff0c;焦虑满满&#xff0c;参加比赛&#xff0c;拿到保研名额&#xff0c;体验实习&#xff0c;之前很少在年末对自己的一年进行回顾和总结。 一月 阳了&#xff0c;寒假期间就窝在家里&#…

web网站,可当期末作业,随机一言,天气,时钟,音乐等综合网站

文章目录 主页面时间胶囊底部条文心一言音乐播放器天气时钟禁用右键其他每次刷新页面会随机更换壁纸新春版 主页面 时间胶囊 底部条 文心一言 点击可随机变化文心一言 音乐播放器 天气时钟 禁用右键 其他 每次刷新页面会随机更换壁纸 新春版

C#编程-描述内存分配

描述内存分配 分配给变量的内存通过两种方式引用&#xff1a;值类型和引用类型。内置数据类型&#xff0c;诸如int、char和float都是值雷兴国。当您声明int变量时&#xff0c;编译器会分配一个内存块以保持该整数值。请思考以下语句&#xff1a; int Num 50;上述语句为保存值…

API 安全设计的建议

1、使用 HTTPS 现在的 Web 已经不是之前那个年代&#xff0c;标准的 HTTP 满足不了 Web 安全需求。而各大浏览器供应商开始标记不使用安全层的 URL&#xff0c;你的 API 也可以考虑开始动手做这件事——用 HTTPS。HTTPS 采用传输层安全性协议&#xff08;TLS&#xff09;对传输…

kubernetes(二)创建集群

kubernetes&#xff08;一&#xff09;概述与架构 云原生实战 语雀 官网 Kubernetes 文档 | Kubernetes 更新&#xff1a;移除 Dockershim 的常见问题 | Kubernetes B站课程&#xff1a;https://www.bilibili.com/video/BV13Q4y1C7hS/?p26 安装版本说明&#xff1a; 视频教程…

【nginx】linux(centos版本)安装nginx

目录 一、下载安装包1.1 官网下载1.2 linux命令下载 二、安装2.1 安装依赖包2.2 安装nginx 三、启动四、访问五、关停六、重载配置 一、下载安装包 1.1 官网下载 1.官网地址 https://nginx.org/en/download.html2.版本说明 1.Mainline version-主线版本 2.Stable version-稳…

LeetCode 2487. 从链表中移除节点:单调栈

【LetMeFly】2487.从链表中移除节点&#xff1a;单调栈 力扣题目链接&#xff1a;https://leetcode.cn/problems/remove-nodes-from-linked-list/ 给你一个链表的头节点 head 。 移除每个右侧有一个更大数值的节点。 返回修改后链表的头节点 head 。 示例 1&#xff1a; 输…

聊一聊 .NET高级调试 内核模式堆泄露

一&#xff1a;背景 1. 讲故事 前几天有位朋友找到我&#xff0c;说他的机器内存在不断的上涨&#xff0c;但在任务管理器中查不出是哪个进程吃的内存&#xff0c;特别奇怪&#xff0c;截图如下&#xff1a; 在我的分析旅程中都是用户态模式的内存泄漏&#xff0c;像上图中的…

openlayer 轨迹动画(方式一)使用ol-ext

ol-ext官方示例地址&#xff1a;ol-ext 示例代码 实测可用 <!DOCTYPE html> <html><head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><title>点沿线动画</title><!-- Openlayers -->…

使用pnnx将Torch模型转换为ncnn

1. 引言 以往我们将Torch模型转换为ncnn模型&#xff0c;通常需经过Torch–>onnx&#xff0c;onnx–>ncnn两个过程。但经常会出现某些算子不支持的问题。 ncnn作者针对该问题&#xff0c;直接开发一个Torch直接转换ncnn模型的工具 (PNNX)&#xff0c;以下为相关介绍及使…

Linux端口转发的几种常用方法

1. SSH 端口转发 SSH 提供了一个非常有意思的功能&#xff0c;就是端口转发&#xff0c;它能够将其他 TCP 端口的网络数据通过 SSH 链接来转发&#xff0c;并且自动提供了相应的加密及解密服务。 (1) 本地端口转发 ssh -fgN -L 2222:localhost:22 localhost (2) 远程端口转…

java查询结果的处理

java查询结果的处理 为了方便使用sql的数据&#xff0c;在查询后mysql会把数据封装到java里面的resultset对象&#xff0c;然后我们需要把resultset里的数据再封装到我们自己创建的对象中&#xff0c;比如Student对象&#xff1a; public class Student {int number;String n…

超快速排序

title: 超快速排序 date: 2024-01-05 11:51:43 tags: 逆序对 categories: 算法进阶指南 题目大意 解题思路 逆序数是一个序列每一个数的左边有多少比他本身大的值。将一个序列排序完整&#xff0c;最小交换次数即是逆序数之和。使用归并排序的同时&#xff0c;将每一个逆序数求…

C#用StringBuilder高效处理字符串

目录 一、背景 二、使用StringBuilder便捷、高效地操作字符串 三、实例 1.源码 2.生成效果 四、实例中知识点 1.StringBuilder类 &#xff08;1&#xff09;构造函数 &#xff08;2&#xff09;属性 &#xff08;3&#xff09;方法 2.Environment.NewLine 属性 一、…

SurfaceView和TextureView理解相关

一、为什么要使用SurfaceView 我们知道View是通过刷新来重绘视图&#xff0c;系统通过发出VSSYNC信号来进行屏幕的重绘&#xff0c;刷新的时间间隔是16ms,如果我们可以在16ms以内将绘制工作完成&#xff0c;则没有任何问题&#xff0c;如果我们绘制过程逻辑很复杂&#xff0c;…

SSD 颗粒还要涨价50%,入手前小心速度陷阱

大伙应该感受到了&#xff0c;自今年年中开始 SSD 普遍开始了小幅涨价。 但即便涨价到现在&#xff0c;NAND 厂商仍属于倒亏状态... 原因很简单&#xff0c;库存太多。 根据 TrendForce 的报道&#xff0c;主要制造商价格将需要再次上涨 40% 以上才能不亏&#xff0c;而达到盈…