python使用PIL和matplotlib获取图片像素点并合并解析
作者:muamaker 发布时间:2021-09-07 15:41:45
标签:python,pil,matplotlib,像素点,合并
python 版本 3.x
首先安装 PIL
由于PIL仅支持到Python 2.7,加上年久失修,于是一群志愿者在PIL的基础上创建了兼容的版本,名字叫Pillow,支持最新Python 3.x,又加入了许多新特性,因此,我们可以直接安装使用Pillow。
所以 安装:
pip install pillow
获取像素点
import numpy as np
from PIL import Image
img = Image.open("./b.png").convert('RGBA')
a_img = np.asarray(img)
获取的图片像素为 一个二维数组,相当于是二维左边系, x ,y 然后里面存了一个元组 值分别为 r g b a
分别计算改变了像素值之后,就需要将数据写入到图片了,这个时候就需要 matplotlib
import matplotlib.pyplot as plt
plt.figure("beauty") # 开启图层,名称为 beauty
plt.imshow(a_img) # 二维数组的数据
plt.axis('off')
#plt.show()
plt.savefig("./result.png")
下面给出一个完整的 demo
需要将两张图片合并计算,并输出结果:
将上面两个图片合并
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
def modeSuperposition(basePixel,mixPixel,alpha):
basePixel = int(basePixel)
mixPixel = int(mixPixel);
res=0
if basePixel <= 128 :
res = int(mixPixel) * int(basePixel) / 128;
else:
res = 255 - (255 - mixPixel)*(255 - basePixel) / 128;
a = alpha / 255;
if a > 1:
a = 1
res = (1-a)*basePixel + a*res
t = int(res)&-256
if t == 0:
return int(res)
if res > 255:
return 255
return 0
def mergePoint(x,y):
p1 = img1[x][y]
p2 = img2[x][y]
p1[1] = modeSuperposition(p1[0],p2[0],p2[3])
p1[2] = modeSuperposition(p1[1],p2[1],p2[3])
p1[3] = modeSuperposition(p1[2],p2[2],p2[3])
imgA = Image.open('./b.png')
img1=np.array(imgA.convert('RGBA')) #打开图像并转化为数字矩
img2=np.array(Image.open("./light.png").convert('RGBA'))
i = len(img1);
j = len(img1[0]);
for k in range(0,len(img2)):
for n in range(0,len(img2[0])):
if k < i and n < j:
mergePoint(k,n)
#img = Image.new("RGBA",imgA.size)###创建一个5*5的图片
plt.figure("beauty") # 开启图层,名称为 beauty
plt.imshow(img1) # 二维数组的数据
plt.axis('off')
#plt.show()
plt.savefig("./result.png")
结果如下:
来源:https://www.cnblogs.com/muamaker/p/10740551.html


猜你喜欢
- 给定一个可迭代sequence,对其中的值进行出现次数统计:方法1:def get_counts(sequence): counts = {
- 前言前一篇autoit实现文件上传打包成.exe可执行文件后,每次只能传固定的那个图片,我们实际测试时候希望传不同的图片。这样每次调用的时候
- 如下所示:from bs4 import BeautifulSouppath = './web/new_index.html'
- 近期,阿里云云安全中心基于全新的深度威胁检测功能,监测到云上部分用户的 SQL Server 数据库内部隐藏着一种新型的持久化后门程序。攻击
- 我们知道,正则表达式是一个处理字符串中很实用的技巧。然而,即便是Javascript写的很厉害的程序猿,有时也会忘掉正则表达式的语法,从而使
- 网络技术,无论是php还是java ,无论是pc时代,还是移动时代,无论是黑客技术,还是程序新人,it技术,无疑是当前最火的行业,无论是个人
- 本文根据自己初学经验编写的使用xlwt模块设置单元格的一些基本样式,如设置单元格的背景颜色,下框线,字体,字体的颜色,设置列宽行高,插入简单
- 从视频中提取音频安装 moviepypip install moviepy相关代码:audio_file = work_path +
- 写了网址规范化后,尚奇公司的柳先生建议再深入讨论一下301转向/重定向。下面就谈谈我所了解的301转向在搜索引擎优化方面的应用。什么是301
- WGAN与GAN的不同去除sigmoid使用具有动量的优化方法,比如使用RMSProp要对Discriminator的权重做修整限制以确保l
- 这篇文章主要介绍了python打包成so文件过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友
- JavaScript是一门OOP,而有些人说,JavaScript是基于对象的。1) 如何创建对象:1. 使用constructor,例如:
- 命令行执行Python脚本的传参应用场景在对ABAQUS进行二次开发时,需要将核心脚本的外部数据传递到脚本内部并执行核心脚本在运行时,可以调
- js关于 byval 与 byref 二者区别: byval 传递数值,实参和形参分处不同的内存单元,互不干扰! byref 传递地址,实参
- 上一篇我们讲过Cookie相关的知识,了解到Cookie是为了交互式web而诞生的,它主要用于以下三个方面:会话状态管理(如用户登录状态、购
- 问题描述有些小伙伴在使用python做GUI界面的时候可能想添加这么一个小功能,就是在界面的某个角落动态的显示当前的时间,本文将介绍具体方法
- 方法一:在php中,抓取https的网站,提示如下的错误内容:Warning: file_get_contents() [function.
- 重置MySQL中表中自增列的初始值的实现方法1. 问题的提出 在MySQL的数据库设计中,一般都会设计自增的数字列,
- 第一种方法:select *from ( select Url,case when Month=01 then&nb
- 中间件Django中的中间件是一个轻量级、底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出。中间件的设