本文用 Python 实现了PS 中的图层混合算法,把很多常见的图层混合算法都汇总到了一起,比起以前写的算法,就是用矩阵运算代替了很耗时的for 循环,运行效率有所提升。具体的代码如下:

import matplotlib.pyplot as plt
from skimage import io
import math
import numpy as np# image fusionfile_name='D:/Visual Effects/PS Algorithm/2.jpg';
img_1=io.imread(file_name)
img_1 = img_1/255.0file_name2='D:/Visual Effects/PS Algorithm/3.jpg'
img_2=io.imread(file_name2)
img_2 = img_2/255.0# 不透明度
def Transparent(img_1, img_2, alpha):img = img_1 * alpha + img_2 * (1-alpha)return img# 正片叠底
def Multiply (img_1, img_2):img = img_1 * img_2return img# 颜色加深
def Color_burn (img_1, img_2):img = 1 - (1 - img_2) / (img_1 + 0.001)mask_1 = img  < 0 mask_2 = img  > 1img = img * (1-mask_1)img = img * (1-mask_2) + mask_2'''row, col, channel = img.shapefor i in range(row):for j in range(col):img[i, j, 0] = min(max(img[i, j, 0], 0), 1)img[i, j, 1] = min(max(img[i, j, 1], 0), 1)img[i, j, 2] = min(max(img[i, j, 2], 0), 1)'''return img# 颜色减淡
def Color_dodge(img_1, img_2):img = img_2 / (1.0 - img_1 + 0.001)mask_2 = img  > 1img = img * (1-mask_2) + mask_2          return img # 线性加深
def Linear_burn(img_1, img_2):img = img_1 + img_2 - 1mask_1 = img  < 0 img = img * (1-mask_1)return img# 线性减淡
def Linear_dodge(img_1, img_2):img = img_1 + img_2mask_2 = img  > 1img = img * (1-mask_2) + mask_2return img# 变亮
def Lighten(img_1, img_2):img = img_1 - img_2mask = img > 0img = img_1 * mask + img_2 * (1-mask) return img # 变暗
def Dark(img_1, img_2):img = img_1 - img_2mask = img < 0img = img_1 * mask + img_2 * (1-mask) return img # 滤色
def Screen(img_1, img_2):img = 1- (1-img_1)*(1-img_2)return img# 叠加
def Overlay(img_1, img_2):mask = img_2 < 0.5img = 2 * img_1 * img_2 * mask + (1-mask) * (1- 2 * (1-img_1)*(1-img_2))return img# 柔光
def Soft_light(img_1, img_2):mask = img_1 < 0.5T1 = (2 * img_1 -1)*(img_2 - img_2 * img_2) + img_2T2 = (2 * img_1 -1)*(np.sqrt(img_2) - img_2) + img_2img = T1 * mask + T2 * (1-mask)return img# 强光
def Hard_light(img_1, img_2):mask = img_1 < 0.5T1 = 2 * img_1 * img_2T2 = 1 - 2 * (1 - img_1) * (1 - img_2)img = T1 * mask + T2 * (1-mask)return img# 亮光
def Vivid_light(img_1, img_2):mask = img_1 < 0.5T1 = 1 - (1 - img_2)/(2 * img_1 + 0.001)T2 = img_2 / (2*(1-img_1) + 0.001)mask_1 = T1 < 0mask_2 = T2 > 1T1 = T1 * (1-mask_1)T2 = T2 * (1-mask_2) + mask_2img = T1 * mask  + T2 * (1 - mask) return img # 点光
def Pin_light(img_1, img_2):mask_1 = img_2 < (img_1 * 2 -1)mask_2 = img_2 > 2 * img_1T1 = 2 * img_1 -1 T2 = img_2T3 = 2 * img_1 img = T1 * mask_1 + T2 * (1 - mask_1) * (1 - mask_2) + T3 * mask_2return img# 线性光
def Linear_light(img_1, img_2):img = img_2 + img_1 * 2 - 1mask_1 = img < 0mask_2 = img > 1img = img * (1-mask_1)img = img * (1-mask_2) + mask_2return img# 实色混合
def Hard_mix(img_1, img_2):img = img_1 + img_2 mask = img_1 + img_2 > 1 img = img * (1-mask) + mask img = img * maskreturn imgalpha = 0.5# img = Transparent(img_1, img_2, alpha)
# img = Multiply (img_1, img_2)
# img = Color_burn(img_1, img_2)
# img = Color_dodge(img_1, img_2)
# img = Linear_burn(img_1, img_2)
# img = Linear_dodge(img_1, img_2)
# img = Lighten(img_1, img_2)
# img = Dark (img_1, img_2)
# img = Screen(img_1, img_2)
# img = Overlay(img_1, img_2)
# img = Soft_light(img_1, img_2)
# img = Hard_light(img_1, img_2)
# img = Vivid_light(img_1, img_2)
# img = Pin_light(img_1, img_2)
# img = Linear_light(img_1, img_2)
img = Hard_mix(img_1, img_2)# show the imageplt.figure(1)
plt.imshow(img_1)
plt.axis('off');plt.figure(2)
plt.imshow(img_2)
plt.axis('off');plt.figure(3)
plt.imshow(img)
plt.axis('off');plt.show()

所有的算法原理以及效果图可以参考我以前的博客:

http://blog.csdn.net/matrix_space/article/details/22416241

http://blog.csdn.net/matrix_space/article/details/22425209

http://blog.csdn.net/matrix_space/article/details/22426633

http://blog.csdn.net/matrix_space/article/details/22427285

http://blog.csdn.net/matrix_space/article/details/22488159

http://blog.csdn.net/matrix_space/article/details/22488467

Python: PS 图层混合算法汇总相关推荐

  1. PS图层混合算法之二(线性加深,线性减淡,变亮,变暗)

    线性加深模式: 查看每个通道的颜色信息,通过降低"亮度"使底色的颜色变暗来反映绘图色,和白色混合没变化. Linear Burn 线形加深 C=A+B-1 如果上下层的像素值之和小 ...

  2. PS图层混合算法之六(差值,溶解, 排除)

    差值模式: 查看每个通道中的颜色信息,比较底色和绘图色,用较亮的像素点的像素值减去较暗的像素点的像素值.与白色混合将使底色反相:与黑色混合则不产生变化. 排除模式可生成和差值模式相似的效果,但比差值模 ...

  3. html正片叠底 透明度,PS图层混合算法之一(不透明度,正片叠底,颜色加深,颜色减淡)...

    下列公式中,A表明了上面图层像素的色彩值(A=像素值/255),B表明下面图层像素的色彩值(B=像素值/255),C表明了混合像素的色彩值(真实的结果像素值应该为255*C).该公式也应用于层蒙板.s ...

  4. PS图层混合算法之一(不透明度,正片叠底,颜色加深,颜色减淡)

    下列公式中,A代表了上面图层像素的色彩值(A=像素值/255),B代表下面图层像素的色彩值(B=像素值/255),C代表了混合像素的色彩值(真实的结果像素值应该为255*C).该公式也应用于层蒙板. ...

  5. PS图层混合算法之四(亮光, 点光, 线性光, 实色混合)

    亮光模式: 根据绘图色通过增加或降低"对比度",加深或减淡颜色.如果绘图色比50%的灰亮,图像通过降低对比度被照亮,如果绘图色比50%的灰暗,图像通过增加对比度变暗. 线性光模式: ...

  6. PS图层混合算法之五(饱和度,色相,颜色,亮度)

    饱和度模式: HcScYc =HBSAYB 饱和度模式:是采用底色的亮度.色相以及绘图色的饱和度来创建最终色.如果绘图色的饱和度为0,则原图没有变化. 输出图像的饱和度为上层,色调和亮度保持为下层. ...

  7. Python几种常见算法汇总

    1.选择排序 选择排序是一种简单直观的排序算法.它的原理是这样:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的后 ...

  8. ps图层混合计算公式

    样式效果 http://www.jb51.net/photoshop/104100.html 注释: 1.混合模式的数学计算公式,另外还介绍了不透明度. 2.这些公式仅适用于RGB图像,对于Lab颜色 ...

  9. Python单源最短路径算法汇总

    给定一个带权有向图G=(V,E),其中每条边的权是一个实数.另外,还给定V中的一个顶点,称为源.要计算从源到其他所有各顶点的最短路径长度.这里的长度就是指路上各边权之和.这个问题通常称为单源最短路径问 ...

最新文章

  1. 下一个亿万市场:企业级SaaS服务谁能独领风骚
  2. python编程输入标准-青少年Python编程能力标准等级模拟考试
  3. Project Structure详解
  4. 自建zookeeper测试dubbo
  5. csh for循环_shell中的for循环用法详解_linux shell
  6. SqlServer 增加字段,修改字段名,删除字段,修改字段默认值
  7. nvme通用驱动_对领域驱动设计的理解与实践
  8. 超酷的OpenSource的Javascript Calendar控件
  9. easyui的validatebox重写自定义验证规则的几个实例
  10. JavaScript中清空数组的三种方式对比以及JavaScript常用数组操作方法
  11. node.js mysql 自动重连_nodejs中mysql断线重连
  12. docker命令的使用
  13. 魔兽世界各服务器显示版本,魔兽7.1各服通用界面AltzUI
  14. 三相桥式全控整流电路simulink仿真_变频器为什么必须整流?整流单元原理图解
  15. 全栈很屌?什么是全栈工程师
  16. TabTimes专访《无尽之剑 II》开发者Donald Mustard
  17. 【C】 求3个正整数的最小公倍数
  18. 模拟QQ心情图片上传预览
  19. networkx网络拓扑节点图和树,python
  20. php抓取天眼查,python用xpath采集天眼查内容,有反爬,zip拼数据

热门文章

  1. 网上阅卷源码有要的吗
  2. X64位游戏逆向入门之魔兽
  3. 一滴泪水能够承载多少的爱?
  4. 浮华背后与我的路-----关于华为裁员
  5. 淘宝开放平台 产品数 查询_“开放”如何改变产品
  6. CIMCAI中集飞瞳成熟港口人工智能AI产品方案,打造高产出投入比的新一代高效能智能码头智能化港口智慧码头解决方案智能化港区口岸
  7. 解决UnsatisfiedLinkError: Unable to load library:Native library not found in resource path
  8. MDK Debug选择JLINK后提示 No ULINK/ME Device found
  9. windows系统下载(纯净环境)
  10. 《python语言程序设计基础》—— 第7章