一张图了解python_一张图学会python
提到一张图,大多数人都知道,有人问一张图学会python,当然了,还有人问python 将多个列表合并成一个,这到底是咋回事?其实python删除列表元素呢,接下来小编为大家分享一张图学会python,欢迎大家阅读!一张图学会python在 python 中除了用 opencv,也可以用 matplotlib 和 PIL 这两个库操作图片。本人偏爱 matpoltlib,因为它的语法更像 matl
提到一张图,大多数人都知道,有人问一张图学会python,当然了,还有人问python 将多个列表合并成一个,这到底是咋回事?其实python删除列表元素呢,接下来小编为大家分享一张图学会python,欢迎大家阅读!
一张图学会python
在 python 中除了用 opencv,也可以用 matplotlib 和 PIL 这两个库操作图片。本人偏爱 matpoltlib,因为它的语法更像 matlab。
一、matplotlib
1. 显示图片
复制代码
import matplotlib.pyplot as plt # plt 用于显示图片
import matplotlib.image as mpimg # mpimg 用于读取图片
import numpy as np
lena = mpimg.imread('lena.png') # 读取和代码处于同一目录下的 lena.png
# 此时 lena 就已经是一个 np.array 了,可以对它进行任意处理
lena.shape #(512, 512, 3)
plt.imshow(lena) # 显示图片
plt.axis('off') # 不显示坐标轴
plt.show()
复制代码
2. 显示某个通道
复制代码
# 显示图片的第一个通道
lena_1 = lena[:,:,0]
plt.imshow('lena_1')
plt.show()
# 此时会发现显示的是热量图,不是我们预想的灰度图,可以添加 cmap 参数,有如下几种添加方法:
plt.imshow('lena_1', cmap='Greys_r')
plt.show()
img = plt.imshow('lena_1')
img.set_cmap('gray') # 'hot' 是热量图
plt.show()
复制代码
3. 将 RGB 转为灰度图
matplotlib 中没有合适的函数可以将 RGB 图转换为灰度图,可以根据公式自定义一个:
复制代码
def rgb2gray(rgb):
return np.dot(rgb[...,:3], [0.299, 0.587, 0.114])
gray = rgb2gray(lena)
# 也可以用 plt.imshow(gray, cmap = plt.get_cmap('gray'))
plt.imshow(gray, cmap='Greys_r')
plt.axis('off')
plt.show()
复制代码
4. 对图像进行放缩
这里要用到 scipy
复制代码
from scipy import misc
lena_new_sz = misc.imresize(lena, 0.5) # 第二个参数如果是整数,则为百分比,如果是tuple,则为输出图像的尺寸
plt.imshow(lena_new_sz)
plt.axis('off')
plt.show()
复制代码
5. 保存图像
5.1 保存 matplotlib 画出的图像
该方法适用于保存任何 matplotlib 画出的图像,相当于一个 screencapture。
plt.imshow(lena_new_sz)
plt.axis('off')
plt.savefig('lena_new_sz.png')
5.2 将 array 保存为图像
from scipy import misc
misc.imsave('lena_new_sz.png', lena_new_sz)
5.3 直接保存 array
读取之后还是可以按照前面显示数组的方法对图像进行显示,这种方法完全不会对图像质量造成损失
np.save('lena_new_sz', lena_new_sz) # 会在保存的名字后面自动加上.npy
img = np.load('lena_new_sz.npy') # 读取前面保存的数组
二、PIL
1. 显示图片
from PIL import Image
im = Image.open('lena.png')
im.show()
2. 将 PIL Image 图片转换为 numpy 数组
im_array = np.array(im)
# 也可以用 np.asarray(im) 区别是 np.array() 是深拷贝,np.asarray() 是浅拷贝
3. 保存 PIL 图片
直接调用 Image 类的 save 方法
from PIL import Image
I = Image.open('lena.png')
I.save('new_lena.png')
4. 将 numpy 数组转换为 PIL 图片
这里采用 matplotlib.image 读入图片数组,注意这里读入的数组是 float32 型的,范围是 0-1,而 PIL.Image 数据是 uinit8 型的,范围是0-255,所以要进行转换:
import matplotlib.image as mpimg
from PIL import Image
lena = mpimg.imread('lena.png') # 这里读入的数据是 float32 型的,范围是0-1
im = Image.fromarray(np.uinit8(lena*255))
im.show()
5. RGB 转换为灰度图
from PIL import Image
I = Image.open('lena.png')
I.show()
L = I.convert('L')
L.show()
自用喜欢请采纳。
Python 发送多图邮件为什么只显示第一张?
首先你在编辑你的网页邮件模板的时候需要(代码自己优化,可以根据图片数量进行判断拼凑,看到你的问题马上想到的简单处理方案)msgText = MIMEText('Some HTML text and an image.
'
'' \
'' \
'' \
'
good!','html','utf-8')
msgRoot.attach(msgText)
然后后面附件要用(我这里比如3个图片,代码可以自己调整)
for i in range(1,4,1):
fp = open('d:\\python_jpg\\%i.jpg' %i, 'rb')
msgImage = MIMEImage(fp.read())
fp.close()
msgImage.add_header('Content-ID', ''%i)
msgRoot.attach(msgImage)
完整测试代码如下:
#!/usr/bin/python
# -*- coding: utf-8 -*-
__author__ = 'cyc'
__data__ = '2015/10/20'
#!/usr/bin/env python3
#coding: utf-8
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
sender = '*@163.com'
receiver = '*@163.com'
subject = 'python email test'
smtpserver = 'smtp.163.com'
username = '*'
password = '*'
msgRoot = MIMEMultipart('related')
msgRoot['Subject'] = '这里是测试图片的发送'
msgText = MIMEText('Some HTML text and an image.
'
'' \
'' \
'' \
'
good!','html','utf-8')
msgRoot.attach(msgText)
for i in range(1,4,1):
fp = open('d:\\python_jpg\\%i.jpg' %i, 'rb')
msgImage = MIMEImage(fp.read())
fp.close()
msgImage.add_header('Content-ID', ''%i)
msgRoot.attach(msgImage)
smtp = smtplib.SMTP()
smtp.connect('smtp.163.com')
smtp.login(username, password)
smtp.sendmail(sender, receiver, msgRoot.as_string())
smtp.quit()
参考资料
http://www.jb51.net/article/34498.htm
http://www.jb51.net/article/49216.htm
python 将多个数据图绘制到一张图上
假设有9张图, 化成3行3列
plt.subplot(331)
plt.plot(...)
plt.subplot(332)
plt.plot(...)
...
plt.subplot(339)
plt.plot(...)
使用python或者Matlab程序,文件夹里提取图片,每隔100张提取一个图片。
用matlab就能做到,把文件夹发过来,我可以给你写程序。
python 实时绘图~~右侧出现多个plots图~~怎么能只在一个图片上绘画~~
你截图也不截代码,看不出你的排列,可能是把绘图写到for循环里面去了,还好我今天比较闲帮你重排了下,按照我这样排就没有问题了:
python 删除一张图片
你是指删除系统上的文件,还是指释放内存中的图片?你用的是PIL?
如果删除系统中的文件,可以用os.remove(targetFile)。
如果是释放内存,好像不需要吧
如何使用python在一张图片上画横线和竖线,线条之间相隔10个像素?请提供详细代码谢谢!!
# -*- coding: utf-8 -*-
__author__ = 'lpe234'
__date__ = '2015-1-14'
from PIL import Image
import ImageDraw
# 打开图像
img = Image.open('i.jpg')
img_d = ImageDraw.Draw(img)
# 获取 图片的 x轴,y轴 像素
x_len, y_len = img.size
for x in range(0, x_len, 10):
img_d.line(((x, 0), (x, y_len)), (0, 0, 0))for y in range(0, y_len, 10):
img_d.line(((0, y), (x_len, y)), (0, 0, 0))# 保存图片
img.save('ii.jpg')
Python的matplotlib怎么在一张画布上,画两个饼状图啊?
%matplotlib inline
import matplotlib.pyplot as plt
# 121 > 1行2列第1个
fig1 = plt.subplot(121)
plt.pie([1,2,3])
# 122 > 1行2列第2个
fig2 = plt.subplot(122)
plt.pie([10,5,5])
# 亦可以plt.subplot(221) 2行2列第1个

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。
更多推荐
所有评论(0)