python图像处理基本操作总结(PIL库、Matplotlib及Numpy)
作者:全部梭哈一夜暴富 发布时间:2022-01-26 00:28:50
标签:python,图像,处理
一、PIL库对图像的基本操作
1、读取图片
PIL网上有很多介绍,这里不再讲解。直接操作,读取一张图片,将其转换为灰度图像,并打印出来。
from PIL import Image
import matplotlib.pyplot as plt
pil_im = Image.open("empire.jpeg")
pil_image = pil_im.convert("L")
plt.gray()
plt.imshow(pil_image)
plt.show()
输出如下所示:
2、转换图片格式
PIL可以将图像保存为多种格式,下面将PNG格式文件保存为JPG格式:
from PIL import Image
import glob
import os
filelist = glob.glob("E:/pythonProject1/filelist/*.png")
for infile in filelist:
outfile = os.path.splitext(infile)[0]+'.jpg'
if infile != outfile:
try:
Image.open(infile).save(outfile)
except IOError:
print("cannot convert", infile)
输出结果如下所示:
3、输出文件夹中所有图片的文件名列表
import os
def get_imlist(path):
"""返回目录中所有JPG图像的文件名列表"""
return [os.path.join(path,f)for f in os.listdir(path) if f.endswith('.jpg')]
print(get_imlist("E:/pythonProject1/filelist/"))
输出为文件名列表
二、Matplotlib
1、绘制图像、点和线
from PIL import Image
from pylab import *
#读取图像到数组中
im = array(Image.open("empire.jpeg"))
#绘制图像
imshow(im)
#一些点
x = [100, 100, 400, 400]
y = [200, 500, 200, 500]
#使用红色星状标记绘制点
plot(x, y)#默认为蓝色实线
# plot(x, y, 'r*')#红色星状标记
# plot(x, y, 'go-')#带有圆圈标记的绿线
# plot(x, y, 'ks')#带有正方形标记的黑色虚线
#绘制连接前三个点的线
plot(x[:3], y[:3])
axis('off')
#添加标题,显示绘制的图像
titles = ['empire']
plt.title = titles
show()
上面的代码首先绘制出原始图像,然后在 x 和 y 列表中给定点的 x 坐标和 y 坐标上绘制出红色星状标记点,最后在两个列表表示的前两个点之间绘制一条线段。该例子的绘制结果下图:
2、图像轮廓和直方图
绘制轮廓需要对每个坐标 [x, y] 的像素值施加同一个阈值,所以首先需要将图像灰度化,这里用 PIL 的 convert()
方法将图像转换成灰度图像。图像的直方图用来表征该图像像素值的分布情况。
from PIL import Image
from pylab import *
# 读取图像到数组中
im = array(Image.open("empire.jpeg").convert('L'))
#创建一个图像
figure()
#不使用颜色信息
gray()
#在原点的左上角显示轮廓图像
contour(im, origin = 'image')#检测图像轮廓
axis('equal')
axis('off')
show()
#新建一个图像
figure
hist(im.flatten(), 128)#绘制图像直方图
show()
图像轮廓图输出如下所示:
输出图像直方图如下所示:
3、交互式标注
在一幅图像中标记一些点,或者标注一些训练数据。PyLab
库中的 ginput()
函数就可以实现交互式标注。在图像点击三次,则程序会自动将这3个点的坐标点[x, y]保存到x列表里。
from PIL import Image
from pylab import *
im = array(Image.open("empire.jpeg"))
imshow(im)
print("please click 3 points")
x = ginput(3)
print("you clicked",x)
show()
三、Numpy
1、图像数组表示
对于图像数据,下面的例子阐述了这一点
from PIL import Image
import numpy as np
im = np.array(Image.open("empire.jpeg"))
print(im.shape,im.dtype)
输出为:
(1024, 683, 3) uint8
每行的第一个元组表示图像数组的大小(行、列、颜色通道),紧接着的字符串表示数组元素的数据类型。因为图像通常被编码成无符号八位整数(uint8),载入图像并将其转换到数组中,数组的数据类型为“uint8”。
2、灰度变换
对图像进行灰度变换,如下所示:
from PIL import Image
import numpy as np
im = np.array(Image.open("empire.jpeg"))
print(im.shape,im.dtype)
from PIL import Image
from matplotlib.pylab import plt
from numpy import *
im1 = array(Image.open('empire.jpeg').convert('L'))
im2 = 255 - im1 #对图像进行反向处理
im3 = (100.0/255) * im1 + 100 #将图像值变换到100-200之间
im4 = 255.0 * (im1/255) ** 2 #对图像像素值求平方后得到的图像
images = [im1, im2, im3, im4]
titles = ["f(x) = x", "f(x) = 255 - x", "f(x) = (100/255)*x +100", "f(x) = 255*(x/255)^2"]
#输出图中的最大像素值和最小像素值
print(int(im1.min()),int(im1.max()))
print(int(im2.min()),int(im2.max()))
print(int(im3.min()),int(im3.max()))
print(int(im4.min()),int(im4.max()))
for i in range(4):
plt.subplot(2, 2, i+1)#2行2列,按编号顺序排列
plt.imshow(images[i])#显示图像
plt.title(titles[i])#显示标题
plt.gray()
# plt.xticks([])
# plt.yticks([])
plt.axis('equal')
plt.axis('off')
plt.show()
输出接入如下所示:
总结
来源:https://blog.csdn.net/AI_girl/article/details/117566254
0
投稿
猜你喜欢
- 我相信站长们做网站的最终目的还是想要获得收入的,我想象站长们大部分的都做Google的联盟的,我相信站长中大部分的人都有考虑过做英文站的,但
- 很久没有发表文章了,最近一直在研究产品设计标准的问题,之前有发过一篇关于 Axure的教程 ,相信很多人已经学会如何使用,这次我给大家介绍一
- 1. 首先到 nodejs.org 下载 Node.js 安装包并安装。2. 打开 Sublime Text 2 编辑器。选择菜单 Tool
- 最近几天仔细研究了一下vertical-align这个属性,结果让我大吃一惊,这个很“资深”的CSS标准竟然在各个浏览器里面的表现都各不相同
- 先给大家展示下效果图,大家感觉不错,请参考实现代码:实现原理:点击按钮,往需要动画的div中添加或移除拥有动画效果的class。由于微信小程
- Console 对象提供对浏览器控制台的接入(如:Firefox 的 Web Console)。不同浏览器上它的工作方式是不一样的,但这里会
- Object 类型的对象虽然有 toString 方法,但结果却是 [Object Object] 让人没法理解的字符。比如简单的对象:{n
- 网站或应用的登录页面有时候通常用户会看很多遍,同时也有机会诱使临时用户注册,所以,一个设计良好的登录页面会比你想象的更有用。这里是一些我们收
- 也许有人会说我火星了,但我的确是第一次知道,欢迎我从火星归来吧。在 Yahoo! 首页上隐藏着这样一个小秘密,大家到 www.yahoo.c
- 确实,如果在原网站如果存在表单提交或cookies的验证,对于ASP来说,不使用基于SOCKET的组件就难以完成,其实,XMLHTTP的另外
- 1 , javascript字符集:javascript采用的是Unicode字符集编码。为什么要采用这个编码呢?原因很简单,16位的Uni
- 通常python安装包都会被默认装在/usr/local/pythonx/lib/site-packages(linux),但是我们有时想自
- 本文实例讲述了python日期相关操作。分享给大家供大家参考,具体如下:用 Python 做项目时,经常会遇到与日期转换相关,日期计算相关的
- 用户登录验证脚本,Chkpwd.asp<% '=======用户登录验证脚本======= '如果尚未定义Passed
- 本文实例为大家分享了js实现放大镜效果的具体代码,供大家参考,具体内容如下该放大区域用背景图片放大<!DOCTYPE html>
- 什么是性能分析?性能分析是衡量应用程序在代码级别的相对性能。性能分析将捕捉的事件包括:CPU的使用,内存的使用,函数的调用时长和次数,以及调
- 先看一下br怎么玩转“清除浮动”了。使用以下代码<br clear="all" />以下是代码效果演示:运行
- 视图在django中,视图对WEB请求进行回应视图接收reqeust对象作为第一个参数,包含了请求的信息视图就是一个Python函数,被定义
- 我就废话不多说了,直接上代码吧!第一种def test1(): l = [] for i in range(1000
- 在写代码过程中我们常常可能会遇到这样一种情况,要对一个list中的每个元素做同样的操作时,两种方法方法一:循环遍历每个元素 话不多说,上代码