python制作图片数据集,Python生成图像

发布时间:2022-11-21

本文目录一览:

  1. [Python 制作Pascal VOC数据集](#Python 制作Pascal VOC数据集)
  2. [如何用python imageio制作图像数据集](#如何用python imageio制作图像数据集)
  3. Python实操:手把手教你用Matplotlib把数据画出来

Python 制作Pascal VOC数据集

下图是 Pascal VOC 数据集格式。

  1. Annotations 目录是存放 xml 文件;
  2. ImageSets 目录是存放 txt 文件,主要是测试集、训练集、验证集等文件名称的集合;
  3. JPEGImages 目录是存放图片文件(jpg); 步骤如下:
  4. Annotations 目录下读取 xml 文件;
  5. 把 xml 文件随机重置一下,这样在训练的时候,各个分类是随机读取,不会出现某一个分类聚集读取,从而影响训练效果。当然,你也可以在训练的时候选择随机重置,道理是一样的;
  6. 创建将要写入的 txt 文件。这里示范了训练集、验证集,其他的可自行添加;
  7. 读取目录文件,通过前缀判断,写入 txt 文件。 有时候不需要指定数据集,只是从一个大的原始数据集中,随机选取一部分当作训练集、一部分当作验证集、一部分当作测试集。

如何用python imageio制作图像数据集

声明在此使用的彩色图转灰度图进行的单通道的图像存储,对于多通道的图像随后进行总结。 主要流程是将图像数据读出:

  • 将图像转换成 NumPy 的数组形式;
  • 将图像进行行的处理编程行向量的存储;
  • 之后是将数据与标签进行合并存储;
  • 存储在一个 list 中;
  • 将这个数据集进行数据的打乱顺序(随机化的过程); 主要的过程就是这些了。 下面是代码的示例:
# -*-coding:utf-8-*-
import numpy
import theano
from PIL import Image
from pylab import *
import os
import theano.tensor as T
import random
import pickle
def dataresize(path=r'D:\worksapce_python\20160426_cp\testing'):
    # test path
    path_t = r"D:\worksapce_python\20160426_cp\training"
    # train path
    datas = []
    train_x = []
    train_y = []
    valid_x = []
    valid_y = []
    test_x = []
    test_y = []
    for dirs in os.listdir(path):
        # print dirs
        for filename in os.listdir(os.path.join(path, dirs)):
            imgpath = os.path.join(os.path.join(path, dirs), filename)
            img = Image.open(imgpath)
            img = img.convert('L').resize((28, 28))
            width, height = img.size
            img = numpy.asarray(img, dtype='float64') / 256.

Python实操:手把手教你用Matplotlib把数据画出来

作者:迈克尔·贝耶勒(Michael Beyeler) 如需转载请联系华章科技。 如果已安装 Anaconda Python 版本,就已经安装好了可以使用的 Matplotlib。否则,可能要访问官网并从中获取安装说明。 正如使用 np 作为 NumPy 的缩写,我们将使用一些标准的缩写来表示 Matplotlib 的引入: 在本书中,plt 接口会被频繁使用。 让我们创建第一个绘图。 假设想要画出正弦函数 sin(x) 的线性图。得到函数在 x 坐标轴上 0 ≤ x < 10 内所有点的值。我们将使用 NumPy 中的 linspace 函数来在 x 坐标轴上创建一个从 0 到 10 的线性空间,以及 100 个采样点: 可以使用 NumPy 中的 sin 函数得到所有 x 点的值,并通过调用 plt 中的 plot 函数把结果画出来: 你亲自尝试了吗?发生了什么吗?有没有什么东西出现? 实际情况是,取决于你在哪里运行脚本,可能无法看到任何东西。有下面几种可能性:

  1. .py 脚本中绘图 如果从一个脚本中运行 Matplotlib,需要加上下面的这行调用:
    plt.show()
    
    在脚本末尾调用这个函数,你的绘图就会出现!
  2. 从 IPython shell 中绘图 这实际上是交互式地执行 Matplotlib 最方便的方式。为了让绘图出现,需要在启动 IPython 后使用所谓的 %matplotlib 魔法命令。 接下来,无须每次调用 plt.show() 函数,所有的绘图将会自动出现。
  3. 从 Jupyter Notebook 中绘图 如果你是从基于浏览器的 Jupyter Notebook 中看这段代码,需要使用同样的 %matplotlib 魔法命令。然而,也可以直接在 notebook 中嵌入图形,这会有两种输出选项: 在本书中,将会使用 inline 选项:
    %matplotlib inline
    
    现在再次尝试一下: 上面的命令会得到下面的绘图输出结果: 如果想要把绘图保存下来留作以后使用,可以直接在 IPython 或者 Jupyter Notebook 使用下面的命令保存:
    plt.savefig('my_figure.png')
    
    仅需要确保你使用了支持的文件后缀,比如 .jpg.png.tif.svg.eps 或者 .pdf。 作为本章最后一个测试,让我们对外部数据集进行可视化,比如 scikit-learn 中的数字数据集。 为此,需要三个可视化工具:
  • matplotlib.pyplot
  • numpy
  • sklearn.datasets 那么开始引入这些包吧: 第一步是载入实际数据:
from sklearn.datasets import load_digits
digits = load_digits()

如果没记错的话,digits 应该有两个不同的数据域:data 域包含了真正的图像数据,target 域包含了图像的标签。相对于相信我们的记忆,我们还是应该对 digits 稍加探索。输入它的名字,添加一个点号,然后按 Tab 键:digits.TAB,这个操作将向我们展示 digits 也包含了一些其他的域,比如一个名为 images 的域。imagesdata 这两个域,似乎简单从形状上就可以区分。 两种情况中,第一维对应的都是数据集中的图像数量。然而,data 中所有像素都在一个大的向量中排列,而 images 保留了各个图像 8×8 的空间排列。 因此,如果想要绘制出一副单独的图像,使用 images 将更加合适。首先,使用 NumPy 的数组切片从数据集中获取一幅图像:

image = digits.images[0]

这里是从 1797 个元素的数组中获取了它的第一行数据,这行数据对应的是 8×8=64 个像素。下面就可以使用 plt 中的 imshow 函数来绘制这幅图像:

plt.imshow(image, cmap='gray')

上面的命令得到下面的输出: 此外,这里也使用 cmap 参数指定了一个颜色映射。默认情况下,Matplotlib 使用 MATLAB 默认的颜色映射 jet。然而,在灰度图像的情况下,gray 颜色映射更有效。 最后,可以使用 pltsubplot 函数绘制全部数字的样例。subplot 函数与 MATLAB 中的函数一样,需要指定行数、列数以及当前的子绘图索引(从 1 开始计算)。我们将使用 for 循环在数据集中迭代出前十张图像,每张图像都分配到一个单独的子绘图中。 这会得到下面的输出结果:

关于作者:Michael Beyeler,华盛顿大学神经工程和数据科学专业的博士后,主攻仿生视觉计算模型,用以为盲人植入人工视网膜(仿生眼睛),改善盲人的视觉体验。他的工作属于神经科学、计算机工程、计算机视觉和机器学习的交叉领域。同时他也是多个开源项目的积极贡献者。 本文摘编自《机器学习:使用 OpenCV 和 Python 进行智能图像处理》,经出版方授权发布。