Pytorch читает и загружает данные изображения (1)

PyTorch

При изучении Pytorch крайне важно научиться правильно создавать или загружать данные.

С данными и многими функциями эффект операции становится очень интуитивным.

В этой статье в основном используются другие библиотеки для чтения файлов изображений (изучив это, вы сможете визуализировать некоторые эффекты в дальнейшем обучении).

Улучшенная организация статьи:

  • Github
  • Обратите внимание на публичный номер: tuduisuinian (насыпь), вы можете получить учебный PDF-документ pytorch в нижней части меню

ноль: готов

Перед загрузкой данных необходимо освоить правильный метод пути чтения. Во многих примерах в учебнике не было изображений, когда они объяснялись, или читатели не знали, как изменить путь чтения в учебнике, что ослабляло энтузиазм.

**Предложение: Чтобы убедиться, что вы можете следовать уроку шаг за шагом, в учебнике появятся образцы изображений.Рекомендуется щелкнуть правой кнопкой мыши - сохранить как изображение и сохранить изображение в папку, в которой вы запускаете программу. . **Как показано ниже:

在这里插入图片描述

Первый: подготовка набора данных

Задача: Читаем эти две картинки по разному (не забываем нажать правой кнопкой мыши - сохранить как картинку, сохранить в папку программы, не забыть переименовать файл как вам нравится, мой переименовывается в002.jpgи003.jpg

在这里插入图片描述

003

После сохранения файла как и одновременного создания нового файла python мой эффект выглядит следующим образом:

004

Далее мы можемload_images.py, выполняются соответствующие операции.

II: Чтение файлов изображений с помощью других библиотек

  • использоватьmatplotlibбиблиотека для чтения изображений

matplotlibФункции в очень похожи на Matlab.

нам нужно использоватьmatplotlib.pyplotфункция в:

imread(文件地址): Выполнить операцию чтения образа (параметр - путь для чтения файла образа)

imshow(数组): Выполнение операции отображения изображения (отображение массива изображений)

show(): Отображение окна для отображения изображений (во многих случаях, если вы не отображаете изображения, вы забываете использовать эту функцию)

Мы пытаемся исследовать тип данных, размер и форму изображения после его чтения.

import matplotlib.pyplot as plt

img = plt.imread('002.jpg')
#图片的高H为460,宽W为346,颜色通道C为3
print(img.shape)
print(img.dtype)
print(type(img))
plt.imshow(img)
plt.show()

Результат:

(460, 346, 3)
uint8
<class 'numpy.ndarray'>

в заключении:imreadПрочитанное изображениеnumpy.ndarryРазмер массива устроен как: высота × ширина × количество каналов, тип данных массиваuint8, то есть размер каждых данных [0,255]

Если вы не хотите читать несколько изображений вручную, вам нужно использовать файл Python, операции с путями и т. д. еще не введен

Если вы добавляете его вручную, просто используйте[array1,array2]В этой форме массивы конкатенированы

import matplotlib.pyplot as plt

img1 = plt.imread('002.jpg')
img2 = plt.imread('003.jpg')
img = [img1, img2]
for i in img:
    plt.imshow(i)
    plt.show()

  • использоватьcv2читать изображение

существуетcv2В библиотеке необходимо использовать следующие функции:

imread(文件地址): прочитать изображение файла по адресу

imshow('窗口名称', 图像数组): отображать массив изображений, но должен сочетатьсяwaitKey()используйте, иначе изображение не может быть отображено

waitKey(延迟时间): необходимо установить время задержки.Когда время задержки меньше или равно 0, окно будет задержано на бесконечное время.Нажмите любую кнопку, чтобы продолжить выполнение следующей программы. Когда время задержки > 0, то есть изображение окна будет отображаться в течение соответствующих миллисекунд, а затем автоматически исчезнет.

import cv2
img1 = cv2.imread('002.jpg')
print(img1.shape)
print(img1.dtype)
print(type(img1))
cv2.imshow('img', img1)
cv2.waitKey(0)

Результат:

(460, 346, 3)
uint8
<class 'numpy.ndarray'>

Вывод: непрочитано读取的图片为numpy.ndarry的数组,数组的大小排列为:高×宽×通道数,数组的数据类型是uint8`, т.е. размер каждых данных [0,255]

Matplotlib и cv2 одинаково обрабатывают формат данных изображения, но есть и различия:

Для чтения канала cv2 читается в порядке BGR, а matplotlib читается в порядке RGB.


  • использоватьPILбиблиотека для обработки изображений

PILполное имяPython Image Library. Это библиотека, которая предоставляет библиотеки, связанные с обработкой изображений для Python.

Функции, которые будут использоваться:

open(文件地址): Откройте файл, обратите внимание, что он открыт и не читается. Основная функция состоит в том, чтобы постоянно проверять адрес файла, гарантируя, что файл открыт. Когда изображение будет обработано, оно будет автоматически загружено.

show(): Используйте встроенный просмотрщик изображений для просмотра изображения.

from PIL import Image
img1 = Image.open('002.jpg')
# 因为PIL有自己的数据结构,所以没有shape,dtype属性
# print(img1.shape)
# print(img1.dtype)
print(type(img1))
img1.show()

Результат:

<class 'PIL.JpegImagePlugin.JpegImageFile'>

мы можем использоватьnumpy.array()функция, будетPILструктурировать данные вnumpyмножество.

import matplotlib.pyplot as plt
from PIL import Image
import numpy as np

img1 = Image.open('002.jpg')
img1 = np.array(img1)
print(img1.shape)
print(img1.dtype)
plt.imshow(img1)
plt.show()

вывод:

(460, 346, 3)
uint8

Как видите, после преобразования PIL в numpy тип данных — uint8.


Три: Резюме

В основном вводит использованиеmatplotlib,cv2,PILбиблиотека для чтения файлов изображений

  • matplotlibсерединаimread,imshow,showфункция
  • cv2серединаimread,imshow,waitKeyфункция
  • PILсерединаopen,showфункция