创建图片读取与保存框架

创建图片读取与保存框架

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("输入你要选择的功能:"))

posted @ 2022-09-06 23:02  ppqppl  阅读(99)  评论(0编辑  收藏  举报