1.相关文章

最近想要实现Photoshop图层混合中的色相模式,在网上查阅了众多关于混合模式实现的文章:

  1. Photoshop图层混合模式详解
  2. PS中混合模式是什么意思?

  3. photoshop图层混合模式中色相模式的原理是什么?

  4. Sketch图层混合模式(Blending)详解

  5. PS中27种图层混合模式原理详解

  6. Python: PS 图层混合算法汇总

  7. Python 模块layeris(GitHub:https://github.com/subwaymatch/layer-is-python/tree/fa10c2c7927a6a2b93f477bfdd57e254080308ce)

其中关于色相模式的描述基本为:色相混合模式是选择基色的亮度和饱和度值与混合色进行混合而创建的效果,混合后的亮度及饱和度取决于基色,但色相取决于混合色。

其关于色相混合的Python实现是,背景变换到HSV然后直接替换色相H,再变换到rgb空间。并且实验GIMP软件(类似ps的开源软件),其效果也是如此。

    (代码来自layeris)def hue(self, target_hue):image_hsv_data = matplotlib.colors.rgb_to_hsv(self.image_data)image_hsv_data[:, :, 0] = target_hueself.image_data = matplotlib.colors.hsv_to_rgb(image_hsv_data)return self

           

原图                                     前景图                                  色相混合结果

GIMP色相混合结果         ps色相混合结果

分析:可以看到ps版本的结果看起来更加舒服,这是因为ps的结果除了应用了前景图的色相,还保持了原图的亮度。这里的亮度不是hsv空间的v,而是Lab空间的L。

2.类似Ps色相模式的Python实现

根据上述的实验和分析的结论,尝试同时进行两件事情:

  1. 原图保持使用前景图的色相H;
  2. 原图保持其原本的亮度L

然而,H更改将会导致L变化,L更改将会导致H、S变化,我采用了循环迭代上述2步操作,实现了和ps基本一致的色相混合。代码如下:

import cv2 as cv
import numpy as np
import matplotlibclass LayerImage(object):def __init__(self, image_data):self.image_data = image_datadef hue_blend(self, blend_data, rep_times=2):'''色相模式图层混合,对前景图和底图,使用前景图在HSV空间的H(色相)替换底图的色相,同时保持底图在替换色相后Lab空间的L保持不变,而更改H和L是相互影响的,通过多次迭代H和L替换实现平衡blend_data: 提供色相的前景图,尺寸需和背景图一致rep_times: 迭代H和L替换的次数,为2时与ps效果相同'''assert self.image_data.shape[:2] == blend_data.shape[:2], 'the shape of blend_data is not same as image_data'image = self.image_dataif self.image_data.shape[2] == 4:image_alpha = np.expand_dims(image[...,3], axis=2)else:image_alpha = Noneimage_L = cv.cvtColor(image, cv.COLOR_BGR2LAB)[..., 0]color_map_H = cv.cvtColor(blend_data, cv.COLOR_BGR2HSV)[:,:,0]for i in range(rep_times):  #image_HSV =  cv.cvtColor(image, cv.COLOR_BGR2HSV)image_HSV[:,:,0] = color_map_Himage_BGR = cv.cvtColor(image_HSV, cv.COLOR_HSV2BGR)image_Lab = cv.cvtColor(image_BGR, cv.COLOR_BGR2LAB)image_Lab[..., 0] = image_L image = cv.cvtColor(image_Lab, cv.COLOR_LAB2BGR)image_HSV =  cv.cvtColor(image, cv.COLOR_BGR2HSV)image_HSV[:,:,0] = color_map_Himage = cv.cvtColor(image_HSV, cv.COLOR_HSV2BGR)if not image_alpha is None:image = np.concatenate((image,image_alpha), axis=2)cv.imwrite('result3.png', image)return imagedef grayscale(self):self.image_data = np.dot(self.image_data[..., :3], [0.2989, 0.5870, 0.1140])self.image_data = np.stack((self.image_data,) * 3, axis=-1)return selfif __name__ == "__main__":  color_map = cv.imread('标准主体_拓色副本.png', cv.IMREAD_UNCHANGED)image = cv.imread('标准主体.png', cv.IMREAD_UNCHANGED)a = LayerImage(image).grayscale().image_datacv.imwrite('result3.png', a)LayerImage(image).hue_blend(color_map, rep_times=2)

结果:

                  

原图                                     前景图                               实现效果                            ps色相混合结果

Ps算法Python实现:图层混合模式-色相相关推荐

  1. python图层合并_Ps算法Python实现:图层混合模式-色相

    1.相关文章 最近想要实现Photoshop图层混合中的色相模式,在网上查阅了众多关于混合模式实现的文章: 其中关于色相模式的描述基本为:色相混合模式是选择基色的亮度和饱和度值与混合色进行混合而创建的 ...

  2. PS图层混合模式MATLAB实现

    PS图层混合模式的MATLAB实现 一.基本介绍 二.算法 1. 组合模式(正常.溶解) 2. 加深混合模式(变暗.正片叠底.颜色加深.线性加深,深色) 3. 减淡混合模式(变亮.滤色.颜色减淡.线性 ...

  3. 图像滤镜艺术---PS图层混合模式之明度模式

    图像滤镜艺术---PS图层混合模式之明度模式 本文将介绍PS图层混合模式中比较复杂 的"明度"模式的算法原理及代码实现内容. 说到PS的图层混合模式,计算公式都有,具体代码实现也能 ...

  4. PS图层混合模式详解

    PS中图层混合模式中的溶解,变暗,正片叠底,颜色加深,线性加深,叠加,柔光,亮光,强光,线性光,点光,实色混合,差值,排除,色相,饱和度,颜色,亮度各是什么原理? Normal 正常模式,也是默认的模 ...

  5. PS学习--图层混合模式详解

    PS中图层混合模式中的溶解,变暗,正片叠底,颜色加深,线性加深,叠加,柔光,亮光,强光,线性光,点光,实色混合,差值,排除,色相,饱和度,颜色,亮度各是什么原理? Normal 正常模式,也是默认的模 ...

  6. 图像特效---PS图层混合模式之明度模式

    本文将介绍PS图层混合模式中比较复杂 的"明度"模式的算法原理及代码实现内容. 说到PS的图层混合模式,计算公式都有,具体代码实现也能找到,但是,都没有完整介绍所有图层混合模式的代 ...

  7. 图片居中裁剪_魔镜,魔镜,谁最美丽!利用PS图层混合模式打造图片幻觉效果

    在今天的教程中,同学们将学习如何利用合成以在图片中创建镜中镜的画面 将Photoshop技能用于创建的一个很棒的视觉差效果.光学错觉效果为大众创造了一种新体验 镜中镜效果对比图,同学们看看能从中学到那 ...

  8. ps图层混合模式的含义

    1.正常模式(Normal模式)--这是图层混合模式的默认方式,较为常用.不和其他图层发生任何混合.使用时用当前图层像素的颜色覆盖下层颜色. 因为在PhotoShop中颜色是当作光线处理的(而不是物理 ...

  9. Photoshop PS图层混合模式详解

    Photoshop 7.0的图层混合选项中增添了"线性加深"模式."线性减淡"模式."亮光"模式."线性光"模式和&qu ...

最新文章

  1. SQL Server 性能基线和监控
  2. percona-Toolkit
  3. 飞在空中的仓库再配合无人机送货,沃尔玛新专利厉害了
  4. 天涯煮酒又发现一篇好文,王阳明传,序就很漂亮,转一下
  5. 上帝就在机器里:复杂算法背后隐藏的可怕现实
  6. 来,我们谈谈怎么学好计算机科学与技术
  7. mysql数据库之单表查询
  8. 【LeetCode】【HOT】297. 二叉树的序列化与反序列化(BFS)
  9. pl/sql 设置编码
  10. 编写可维护的javascript代码--- 2015.11.21(基本格式化)
  11. 【数字信号调制】基于matlab多进制数字相位调制(4PSK)【含Matlab源码 1001期】
  12. centos6.6 x86_64 install virtualbox 增强功能和ulipad
  13. EMP电磁脉冲射频发射器制作教程
  14. 计算机设置了分组用户怎么切换,怎么弄微信小号-不单止换小号,另外这些微信小技巧也一定让你“相见恨晚”...
  15. 怎么实现类似星星闪烁的效果(box-shadow)
  16. 【M24】了解虚方法、多继承、虚基类、RTTI的成本
  17. 为什么要配置环境变量,配置环境变量有什么好处?
  18. 盖茨被逐出微软董事会真相曝光:长期跟员工搞地下情,27年婚姻中出轨不断,人设已崩...
  19. 你绝没见过的奢华 全球最贵的13样东西
  20. 块级元素 div水平居中 垂直居中

热门文章

  1. 太原理工大学移动应用软件开发技术实验报告
  2. java-不死神兔百钱百鸡
  3. 使用jquery的bind来检测textarea,input等的文本变化
  4. 医院HIS系统运维工作见闻
  5. mysql 中间表 性能_mysql性能优化
  6. 做为中层管理者的你,应该扮演什么角色
  7. 足球视频AI(五)——球员与球的对象跟踪
  8. allegro制作通孔焊盘封装-flash热风焊盘-图文并茂的Allegro 通孔焊盘制作教程
  9. 有什么压缩图片的方法?这里有两个方法分享
  10. 单片机、嵌入式错综复杂的关系分析