提到一张图,大多数人都知道,有人问一张图学会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个

Logo

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

更多推荐