创建图片读取与保存框架
python 方法
使用 python 进行图片读取与存储的方法共有四种:
原生库 PIL
opencv 库
matplotlib 库
skimg 库
每一种都有不同的使用领域
python 原生 PIL
python 中最简单和方便的一种图片读取与存储方式,可以直接读取指定路径的图片,通过电脑上的图片查看器直接进行查看,并可以保存到指定路径
from PIL import Image
im = Image.open("要读取的图片")
im.show()
im.save("要保存的目标位置",quality=95)
使用 opencv 库
opencv 可以用于以下等方面:
图像数据的操作: 分配、释放、复制、设置和转换。 图像是视频的输入输出I/O ,文件与摄像头的输入、图像和视频文件输出)。
矩阵和向量的操作以及线性代数的算法程序:矩阵积、解方程、特征值以及奇异值等。
各种动态数据结构:列表、队列、集合、树、图等。
基本的数字图像处理:滤波、边缘检测、角点检测、采样与差值、色彩转换、形态操作、直方图、图像金字塔等。
结构分析:连接部件、轮廓处理、距离变换、各自距计算、模板匹配、Hough变换、多边形逼近、直线拟合、椭圆拟合、Delaunay 三角划分等。
摄像头定标:发现与跟踪定标模式、定标、基本矩阵估计、齐次矩阵估计、立体对应。
运动分析:光流、运动分割、跟踪。
目标识别:特征法、隐马尔可夫模型:HMM。
基本的GUI:图像与视频显示、键盘和鼠标事件处理、滚动条。
图像标注:线、二次曲线、多边形、画文字。
import cv2
image = cv2.imread("要读取的图片")
cv2.imshow('image',image)
# cv2.waitKey(0)
cv2.imwrite("要保存的目标位置",image)
如果只是用最基础的图片读取和存储功能,与 PIL 相似
使用 matplotliib 库
Matplotlib 是 Python 中类似 MATLAB 的绘图工具,如果您熟悉 MATLAB,那么可以很快的熟悉它。Matplotlib 提供了一套面向对象绘图的 API,它可以轻松地配合 Python GUI 工具包(比如 PyQt,WxPython、Tkinter)在应用程序中嵌入图形。与此同时,它也支持以脚本的形式在 Python、IPython Shell、Jupyter Notebook 以及 Web 应用的服务器中使用。
import matplotlib.image as mpimg
import matplotlib.pyplot as plt
image = mpimg.imread("要读取的图片")
plt.figure(num = 1)
plt.imshow(image)
plt.show()
plt.imshow(num = 1)
plt.savefig("要保存的目标位置")
使用 skimg 库
scikit-image简写为skimage,基于python脚本语言开发的数字图片处理包。
skimage包由许多的子模块组成,各个子模块提供不同的功能。主要子模块列表如下:
from skimage import io
image= io.imread("要读取的图片")
io.imshow(image)
io.show()
io.imsave("要保存的目标位置",image)
虽然使用 skimg 与 matplotlab 这两个库代码上看起来差不多,但是功能上有一定的出入
使用 imageio 库
可以用于对 gif 等动态图像或视频等进行图片分解
一种适用于深度机器学习的图片读取,需要使用 GPU 进行机器学习
示例如下:
import imageio
im = imageio.get_reader(r'C:\Users\admin\Pictures\Saved Pictures\GIF.gif') # 读取图片
num = 1
for frame in im:
imageio.imsave('./image/%s.png'%num,frame,'PNG') # 保存每一帧
num += 1
print("这张GIF图片总共由:%s张 PNG图片组成!!!"%num)
通过 python 语言整体实现效果
# python
# -*- coding: UTF-8 -*-
'''
@Author :ppqppl
@Date :2022/9/6 10:23
'''
def PILread(loadpath):
from PIL import Image
im = Image.open(loadpath)
im.show()
print("已经打开指定文件!")
def cvread(loadpath): # 进读取图片与 PIL 基本无区别
import cv2
image = cv2.imread("logo.png")
cv2.imshow('image',image)
cv2.waitKey(0)
print("已经打开指定文件!")
def matplotlibread(loadpath):
import matplotlib.image as mpimg
import matplotlib.pyplot as plt
image = mpimg.imread(loadpath)
plt.figure(num = 1)
plt.imshow(image)
plt.show()
def skimgread(loadpath):
from skimage import io
image= io.imread(loadpath)
io.imshow(image)
io.show()
#matplotlib与skimg均使用sciview模块进行图片显示
def PILwrite(loadpath,savepath):
from PIL import Image
im = Image.open(loadpath)
im.save(savepath,quality=95)
print("成功保存图片!")
def cvwrite(loadpath,savepath):
import cv2
image = cv2.imread(loadpath)
cv2.imwrite(savepath,image)
def matplotlibwrite(loadpath,savepath):
import matplotlib.image as mpimg
import matplotlib.pyplot as plt
iamge = mpimg.imread(loadpath)
plt.imshow(num = 1)
plt.savefig(savepath)
def skimagewrite(loadpath,savepath):
from skimage import io
image = io.imread(loadpath)
io.imsave(savepath,image)
if __name__ == "__main__":
print("1.读取图片\n2.保存图片\n本程序共采用四种python通用的图片处理方法")
num = int(input("输入你要选择的功能:"))
while num != 0:
if num == 1:
print("1.PIL读入\n2.opencv读入\n3.matplotlib读入\n4.skimg读入")
code = int(input("输入你要选择的处理方法代码:"))
loadpath = input("输入要读取的图片地址(建议使用绝对路径):")
if code == 1:
PILread(loadpath)
elif code == 2:
cvread(loadpath)
elif code == 3:
matplotlibread(loadpath)
elif code == 4:
skimgread(loadpath)
elif num == 2:
print("1.PIL读入\n2.opencv读入\n3.matplotlib读入\n4.skimg读入")
code = int(input("输入你要选择的处理方法代码:"))
loadpath = input("输入要保存的图片路径(建议使用绝对路径):")
savepath = input("输入要保存的目标位置(建议使用绝对路径,包括要保存的文件格式及名称):")
if code == 1:
PILwrite(loadpath,savepath)
elif code == 2:
cvwrite(loadpath,savepath)
elif code == 3:
matplotlibwrite(loadpath,savepath)
elif code == 4:
skimagewrite(loadpath,savepath)
print("1.读取图片\n2.保存图片")
num = int(input("输入你要选择的功能:"))