这篇文章主要介绍了python图片合成的示例,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
python的PIL库简直好用的不得了,PIL下面的Image库更是封装了很多对图片处理的函数,关于Image库的介绍和使用,

这里用我半个月前看到的一篇博客写的demo作为背景,做一下图片的合成

图片可以看作是很多像素点组成的,每个像素点都是一个RGB颜色,(red, green, blue), 那么合成两张照片就有办法了,我们可以在一张新的RGB色的图片里一个像素点取图片一的对应位置的像素,下一个像素点取图片二的像素,直到遍历完成,代码如下:

 | `from` `PIL` `import` `Image``##这里采用传入图片地址调用此函数``#这个方法目前不支持按比例合成,默认为1:1``#各取一个像素点合并,传入的参数为两张图片的地址``def` `merge1(img1_address,img2_addess):``status``=``100``#状态码100为正常``#  200为地址错误``try``:``img1``=``Image.``open``(img1_address)``img2``=``Image.``open``(img2_address)``except``:``status``=``200``img_new``=``""``else``:``width``=``min``(img1.size[``0``],img2.size[``0``])``height``=``min``(img1.size[``1``],img2.size[``1``])``print``(width,height)``img_new` `=` `Image.new(``'RGB'``,(width,height))``for` `x` `in` `range``(width):``for` `y` `in` `range``(height):``if` `y``%``2``=``=``0``:``pixel``=``img1.getpixel((x,y))``img_new.putpixel((x,y),pixel)``else``:``pixel``=``img2.getpixel((x,y))``img_new.putpixel((x,y),pixel)``finally``:``return` `img_new,status`

|

上述代码会返回一张新的图片和一个状态码,接受的时候用两个变量接受

另一种方法是每个像素点各取%50的原图片的颜色,然后把像素点放置在对应位置,为了功能更加强大,我把两者的混合比例设为可调,默认是50%的比例,代码如下:

|

|

`from` `PIL` `import` `Image``#将像素点按比例取色,然后合成一个新像素点``#传入的参数为两张图片的地址和比例``#如果两者之和不为1则以第一个图片的比例为准``def` `merge2(img1_address,img2_address,percent1``=``0.50``,percent2``=``0.50``):``status``=``100``#状态码100为正常``#  200为地址错误``try``:``img1``=``Image.``open``(img1_address)``img2``=``Image.``open``(img2_address)``except``:``status``=``200``img_new``=``""``else``:``if` `percent1``+``percent2!``=``1``:``percent2``=``1``-``percent1``width` `=` `min``(img1.size[``0``],img2.size[``0``])``height` `=` `min``(img1.size[``1``],img2.size[``1``])``img_new` `=` `Image.new(``'RGB'``,(width,height))``for` `x` `in` `range``(width):``for` `y` `in` `range``(height):``r1,g1,b1``=``img1.getpixel((x,y))``r2,g2,b2``=``img2.getpixel((x,y))``r``=``int``(percent1``*``r1``+``percent2``*``r2)``g``=``int``(percent1``*``g1``+``percent2``*``g2)``b``=``int``(percent1``*``b1``+``percent2``*``b2)``img_new.putpixel((x,y),(r,g,b))``finally``:``return` `img_new,status`|

返回的参数与上述相同
如果想要保存图片可用image.save()函数保存

总的代码如下:

 | `from` `PIL` `import` `Image``##这里采用传入图片地址调用此函数``#这个方法目前不支持按比例合成,默认为1:1``#各取一个像素点合并,传入的参数为两张图片的地址``def` `merge1(img1_address, img2_addess, direct):``status``=``100``#状态码100为正常``#  200为地址错误``try``:``img1``=``Image.``open``(img1_address)``img2``=``Image.``open``(img2_address)``except``:``status``=``200``img_new``=``""``else``:``width``=``min``(img1.size[``0``], img2.size[``0``])``height``=``min``(img1.size[``1``], img2.size[``1``])``print``(width,height)``img_new` `=` `Image.new(``'RGB'``,(width, height))``for` `x` `in` `range``(width):``for` `y` `in` `range``(height):``if` `y``%``2` `=``=` `0``:``pixel` `=` `img1.getpixel((x,y))``img_new.putpixel((x,y), pixel)``else``:``pixel` `=` `img2.getpixel((x,y))``img_new.putpixel((x,y), pixel)``finally``:``return` `status``#将像素点按比例取色,然后合成一个新像素点``#传入的参数为两张图片的地址和比例``#如果两者之和不为1则以第一个图片的比例为准``def` `merge2(img1_address, img2_address, direction, percent1):``status` `=` `100``#状态码100为正常``# 200为地址错误``try``:``img1` `=` `Image.``open``(img1_address)``img2` `=` `Image.``open``(img2_address)``except``:``status` `=` `200``img_new` `=` `""``else``:``percent2` `=` `1` `-` `percent1``width` `=` `min``(img1.size[``0``], img2.size[``0``])``height` `=` `min``(img1.size[``1``], img2.size[``1``])``img_new` `=` `Image.new(``'RGB'``, (width,height))``for` `x` `in` `range``(width):``for` `y` `in` `range``(height):``r1,g1,b1``=``img1.getpixel((x,y))``r2,g2,b2``=``img2.getpixel((x,y))``r` `=` `int``(percent1` `*` `r1` `+` `percent2` `*` `r2)``g` `=` `int``(percent1` `*` `g1` `+``percent2` `*` `g2)``b` `=` `int``(percent1` `*` `b1` `+``percent2` `*` `b2)``img_new.putpixel((x,y),(r,g,b))``img_new.save(direction)``#img_new.show()``finally``:``return` `status``#切记在接受返回信息时先判断状态码是否异常,如果正确再执行相应操作``if` `__name__``=``=``'__main__'``:``img1_address` `=` `"B:\Picture\YourName\1.jpg"``img2_address` `=` `"B:\Picture\YourName\2.jpg"``direction` `=` `"D:/Python/PyQt/课程设计/merges/merge9.png"``status` `=` `merge2(img1_address, img2_address, direction,` `0.30``)``print``(status)`|

当然,我发现Image库中有Image.blend(image1, image2, alpha)这个混合图片的函数,还没看源码,不知道他是用什么方法实现的。

原先的两张照片:

合成后的照片:

左图是方法一,右图是方法二

优劣:
方法一不易造成曝光过度,因为实际的像素点并没改动,只是间隔变大了,但这样可能会造成轮廓不清晰
方法二在比例适当时效果是优于方式一的,但比例不合适就会看起来像曝光过度一样,示例中方法二用的比例是0.3:0.7,又是比例不当效果会很糟糕,孰优孰劣请按效果好坏使用。

python图片合成的示例相关推荐

  1. python合成图片_python图片合成的示例

    python的PIL库简直好用的不得了,PIL下面的Image库更是封装了很多对图片处理的函数,关于Image库的介绍和使用,看这里:http://effbot.org/imagingbook/ima ...

  2. python图片合成海报

    记录知识点备用 功能:利用python合成海报,要求背景图上加上头像.昵称.二维码. import io import qrcode import requests from PIL import I ...

  3. python将视频分解为图片+将图片合成为视频

    系列文章目录 文章目录 系列文章目录 前言 一.python视频拆分+图片合成(源码一) 1.python视频拆分 1.python图片合成 二.python视频拆分+图片合成(源码二) 三.pyth ...

  4. python制作图片墙_利用python生成照片墙的示例代码

    PIL(Python Image Library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了.其官方主页为:PIL. PIL历 ...

  5. python图片马赛克_Python实现PS滤镜中马赛克效果示例

    本文实例讲述了Python实现PS滤镜中马赛克效果.分享给大家供大家参考,具体如下: 这里利用 Python 实现PS 滤镜中的马赛克效果,具体的算法原理和效果可以参考附录说明,Python示例代码如 ...

  6. python小游戏编程arcade----坦克动画图片合成

    python小游戏编程arcade----坦克动画图片合成 前言 坦克动画图片合成 1.PIL image 1.1 读取文件并转换 1.2 裁切,粘贴 1.3 效果图 1.4 代码实现 2.处理图片的 ...

  7. python调整图片亮度_python 调整图片亮度的示例

    实现效果 实现代码 import matplotlib.pyplot as plt from skimage import io file_name='D:/2020121173119242.png' ...

  8. php 合成微信头像,PHP 图片合成、仿微信群头像的方法示例

    搜索热词 本文实例讲述了PHP 图片合成.仿微信群头像的方法.分享给大家供大家参考,具体如下: 参考文章: 作者:凯歌~,PHP图片合成方法(多张图片合成一张)https://www.jb51.net ...

  9. python调整图片亮度_python调整图片亮度的示例

    这篇文章我们来讲一下在网站建设中,python调整图片亮度的示例.本文对大家进行网站开发设计工作或者学习都有一定帮助,下面让我们进入正文. 实现效果 实现代码 import matplotlib.py ...

  10. python opencv PIL 视频分割成图片 图片合成为视频 修改图片大小(抗锯齿)

    Python代码将原有的视频分割成图片,我的例子是一帧一帧的分割 用python+opencv完成视频的分割 import cv2 #导入opencv模块 print(2) #测试是否运行 vc=cv ...

最新文章

  1. 归并排序之——二路归并(c/c++)
  2. java顺序结构类型,Java类的完整构造执行顺序
  3. 瑞士电信vCPE商用落地 华三通信NFV方案成最大功臣
  4. codeforces contest 1140(D~G)
  5. 04Hadoop中的setPartitionerClass/SortComparator/GroupingComparator问题
  6. ora29280 oracle,细节:utl_file_dir错误设置导致ORA-29280
  7. C#通过FFmpeg获得视频文件参数
  8. python 画出决策边界_Python3入门机器学习 - 逻辑回归与决策边界
  9. 漫画:如何给女朋友解释什么是策略模式?
  10. python列表推导式使用
  11. 利用函数imnoise2处理噪声污染和spfilt处理滤波器
  12. CSFB和SRVCC概念解释
  13. 计算机一级系统压缩密码,压缩文件加密,教您给winRAR压缩的文件设置密码
  14. LEAK: ByteBuf.release() was not called before it‘s garbage-collected
  15. json rpgmv 加密_加密-如何对JSON对象进行加密哈希处理?
  16. python 认证机构_利用Python爬了SIG官网BQB认证公司清单,我有一些重大发现..
  17. 软件测试--测试用例
  18. 人脸识别机与服务器访问协议,人脸识别终端485通信协议.doc
  19. 微信小程序开发消息推送配置教程
  20. 智慧交通产品解决方案-交通地理信息平台

热门文章

  1. 3步解决AS提示:Compilation is not supported for following modules
  2. 探访广东电子垃圾第一镇:家庭作坊饮鸩止渴---ESM
  3. java老九_【老九】【Java】小议转义字符
  4. 苹果怎么用微信链接服务器,苹果手机如何设置微信登陆锁
  5. splitter将winform窗体分为三列
  6. 【基于狂神Docker双响曲】:1、Docker入门及常用部署
  7. [网络安全自学篇] 八十二.WHUCTF之隐写和逆向类解题思路WP(文字解密、图片解密、佛语解码、冰蝎流量分析、逆向分析)
  8. 枪林弹雨 该服务器维护中,枪林弹雨登陆BUG解决方法
  9. Nginx Passenger 性能调优
  10. C++定义复数类(Complex)