Главная » 2025 » Декабрь » 22 » Преобразование массива NumPy в объект изображения
21:44
Преобразование массива NumPy в объект изображения

Преобразование массива NumPy в объект изображения

Преобразовать массив NumPy в объект изображения позволяют следующие статические методы из класса UHelperNP:

  • ndimage_to_uimage() — возвращает объект изображения на основе массива с типом uint8 (диапазон значений от 0 до 255);
  • npint_to_uimage() — возвращает объект изображения на основе массива с типом int32 (с сохранением диапазона значений от 0 до 255);
  • npuint16_to_uimage() — возвращает объект изображения на основе массива с типом uint16 (диапазон значений от 0 до 65 535);
  • npfloat_to_uimage() — возвращает объект изображения на основе массива с типом float32  или float64 (диапазон значений от 0.0 до 1.0).

Тип uint8 (диапазон значений от 0 до 255)

Создать объект изображения на основе массива NumPy с типом uint8  (в диапазоне значений от 0 до 255) позволяет статический метод ndimage_to_uimage() из класса UHelperNP. Формат метода:

UHelperNP.ndimage_to_uimage(<Массив NumPy>)

В качестве параметра указывается массив NumPy с типом uint8. Метод возвращает объект изображения UImage, UImageRGB или UImageGray в зависимости от количества каналов или значение None  в случае ошибки.

Пример преобразования:

import numpy as np
from unicross_image.uhelper_np import UHelperNP

# Преобразование массива NumPy в UImage
arr = np.array([
          [[255, 0, 0, 128], [255, 0, 0, 128], [255, 0, 0, 128]],
          [[255, 0, 0, 128], [255, 0, 0, 128], [255, 0, 0, 128]]
      ], dtype=np.uint8)
print(arr.shape)  # (2, 3, 4)
print(arr.dtype)  # uint8
img = UHelperNP.ndimage_to_uimage(arr)
if img:
    print(img)     # UImage(width=3, height=2)
    print(img.arr)
    # [255, 0, 0, 128,   255, 0, 0, 128,   255, 0, 0, 128,
    #  255, 0, 0, 128,   255, 0, 0, 128,   255, 0, 0, 128]
else:
    print("Ошибка при выполнении операции")

# Преобразование массива NumPy в UImageRGB
arr = np.array([
          [[255, 0, 0], [255, 0, 0], [255, 0, 0]],
          [[255, 0, 0], [255, 0, 0], [255, 0, 0]]
      ], dtype=np.uint8)
print(arr.shape)  # (2, 3, 3)
print(arr.dtype)  # uint8
img = UHelperNP.ndimage_to_uimage(arr)
if img:
    print(img)     # UImageRGB(width=3, height=2)
    print(img.arr)
    # [255, 0, 0,   255, 0, 0,   255, 0, 0,
    #  255, 0, 0,   255, 0, 0,   255, 0, 0]
else:
    print("Ошибка при выполнении операции")

# Преобразование массива NumPy в UImageGray
arr = np.array([
          [255, 255, 255],
          [255, 255, 255]
      ], dtype=np.uint8)
print(arr.shape)  # (2, 3)
print(arr.dtype)  # uint8
img = UHelperNP.ndimage_to_uimage(arr)
if img:
    print(img)     # UImageGray(width=3, height=2)
    print(img.arr) # [255, 255, 255,   255, 255, 255]
else:
    print("Ошибка при выполнении операции")

Тип int32 (диапазон значений от 0 до 255)

Создать объект изображения на основе массива NumPy с типом int32  (в диапазоне значений от 0 до 255) позволяет статический метод npint_to_uimage() из класса UHelperNP. Формат метода:

UHelperNP.npint_to_uimage(<Массив NumPy>, is_normalize=False)

В качестве первого параметра указывается массив NumPy с типом int32. Если в параметре is_normalize задано значение True, то будет выполнена нормализация диапазона значений. По умолчанию нормализация не выполняется. Метод возвращает объект изображения UImage, UImageRGB или UImageGray в зависимости от количества каналов или значение None  в случае ошибки.

Пример преобразования:

import numpy as np
from unicross_image.uhelper_np import UHelperNP

# Преобразование массива NumPy в UImage
arr = np.array([
          [[255, 0, 0, 128], [255, 0, 0, 128], [255, 0, 0, 128]],
          [[255, 0, 0, 128], [255, 0, 0, 128], [255, 0, 0, 128]]
      ], dtype=np.int32)
print(arr.shape)  # (2, 3, 4)
print(arr.dtype)  # int32
img = UHelperNP.npint_to_uimage(arr)
if img:
    print(img)     # UImage(width=3, height=2)
    print(img.arr)
    # [255, 0, 0, 128,   255, 0, 0, 128,   255, 0, 0, 128,
    #  255, 0, 0, 128,   255, 0, 0, 128,   255, 0, 0, 128]
else:
    print("Ошибка при выполнении операции")

# Преобразование массива NumPy в UImageRGB
arr = np.array([
          [[255, 0, 0], [255, 0, 0], [255, 0, 0]],
          [[255, 0, 0], [255, 0, 0], [255, 0, 0]]
      ], dtype=np.int32)
print(arr.shape)  # (2, 3, 3)
print(arr.dtype)  # int32
img = UHelperNP.npint_to_uimage(arr)
if img:
    print(img)     # UImageRGB(width=3, height=2)
    print(img.arr)
    # [255, 0, 0,   255, 0, 0,   255, 0, 0,
    #  255, 0, 0,   255, 0, 0,   255, 0, 0]
else:
    print("Ошибка при выполнении операции")

# Преобразование массива NumPy в UImageGray
arr = np.array([
          [255, 255, 255],
          [255, 255, 255]
      ], dtype=np.int32)
print(arr.shape)  # (2, 3)
print(arr.dtype)  # int32
img = UHelperNP.npint_to_uimage(arr)
if img:
    print(img)     # UImageGray(width=3, height=2)
    print(img.arr) # [255, 255, 255,   255, 255, 255]
else:
    print("Ошибка при выполнении операции")

По умолчанию нормализация диапазона значений не выполняется. При этом некорректное значение не приведет к переполнению стека и полной инверсии цвета, но выполнение преобразований станет невозможным:

import numpy as np
from unicross_image.uhelper_np import UHelperNP

arr = np.array([
          [256, 255, 255],
          [255, 255, 255]
      ], dtype=np.int32)
img = UHelperNP.npint_to_uimage(arr)
print(img.arr)         # [256, 255, 255,   255, 255, 255]
print(img.is_normal()) # False

Если в параметре is_normalize задано значение True, то будет выполнена нормализация диапазона значений от 0 до 255:

import numpy as np
from unicross_image.uhelper_np import UHelperNP

arr = np.array([
          [256, 255, 255],
          [255, 255, 255]
      ], dtype=np.int32)
img = UHelperNP.npint_to_uimage(arr, is_normalize=True)
print(img.arr)         # [255, 255, 255,   255, 255, 255]
print(img.is_normal()) # True

Тип uint16 (диапазон значений от 0 до 65 535)

Создать объект изображения на основе массива NumPy с типом uint16  (в диапазоне значений от 0 до 65 535) позволяет статический метод npuint16_to_uimage() из класса UHelperNP. Формат метода:

UHelperNP.npuint16_to_uimage(<Массив NumPy>)

В качестве параметра указывается массив NumPy с типом uint16. Метод возвращает объект изображения UImage, UImageRGB или UImageGray в зависимости от количества каналов или значение None  в случае ошибки.

Пример преобразования:

import numpy as np
from unicross_image.uhelper_np import UHelperNP

# Преобразование массива NumPy в UImage
arr = np.array([
      [[65535, 0, 0, 32896], [65535, 0, 0, 32896], [65535, 0, 0, 32896]],
      [[65535, 0, 0, 32896], [65535, 0, 0, 32896], [65535, 0, 0, 32896]]
    ], dtype=np.uint16)
print(arr.shape)  # (2, 3, 4)
print(arr.dtype)  # uint16
img = UHelperNP.npuint16_to_uimage(arr)
if img:
    print(img)     # UImage(width=3, height=2)
    print(img.arr)
    # [255, 0, 0, 128,   255, 0, 0, 128,   255, 0, 0, 128,
    #  255, 0, 0, 128,   255, 0, 0, 128,   255, 0, 0, 128]
else:
    print("Ошибка при выполнении операции")

# Преобразование массива NumPy в UImageRGB
arr = np.array([
          [[65535, 0, 0], [65535, 0, 0], [65535, 0, 0]],
          [[65535, 0, 0], [65535, 0, 0], [65535, 0, 0]]
      ], dtype=np.uint16)
print(arr.shape)  # (2, 3, 3)
print(arr.dtype)  # uint16
img = UHelperNP.npuint16_to_uimage(arr)
if img:
    print(img)     # UImageRGB(width=3, height=2)
    print(img.arr)
    # [255, 0, 0,   255, 0, 0,   255, 0, 0,
    #  255, 0, 0,   255, 0, 0,   255, 0, 0]
else:
    print("Ошибка при выполнении операции")

# Преобразование массива NumPy в UImageGray
arr = np.array([
          [65535, 65535, 65535],
          [65535, 65535, 65535]
      ], dtype=np.uint16)
print(arr.shape)  # (2, 3)
print(arr.dtype)  # uint16
img = UHelperNP.npuint16_to_uimage(arr)
if img:
    print(img)     # UImageGray(width=3, height=2)
    print(img.arr) # [255, 255, 255,   255, 255, 255]
else:
    print("Ошибка при выполнении операции")

Типы float32 и float64 (диапазон значений от 0.0 до 1.0)

Создать объект изображения на основе массива NumPy с типом float32 или float64 (в диапазоне значений от 0.0 до 1.0) позволяет статический метод npfloat_to_uimage() из класса UHelperNP. Формат метода:

UHelperNP.npfloat_to_uimage(<Массив NumPy>, is_normalize=False)

В качестве первого параметра указывается массив NumPy с типом float32 или float64. Если в параметре is_normalize задано значение True, то будет выполнена нормализация диапазона значений. По умолчанию нормализация не выполняется. Метод возвращает объект изображения UImage, UImageRGB или UImageGray в зависимости от количества каналов или значение None  в случае ошибки.

Пример преобразования:

import numpy as np
from unicross_image.uhelper_np import UHelperNP

# Преобразование массива NumPy в UImage
arr = np.array([
 [[1., 0, 0, 0.5019608], [1., 0, 0, 0.5019608], [1., 0, 0, 0.5019608]],
 [[1., 0, 0, 0.5019608], [1., 0, 0, 0.5019608], [1., 0, 0, 0.5019608]]
], dtype=np.float32)
print(arr.shape)  # (2, 3, 4)
print(arr.dtype)  # float32
img = UHelperNP.npfloat_to_uimage(arr)
if img:
    print(img)     # UImage(width=3, height=2)
    print(img.arr)
    # [255, 0, 0, 128,   255, 0, 0, 128,   255, 0, 0, 128,
    #  255, 0, 0, 128,   255, 0, 0, 128,   255, 0, 0, 128]
else:
    print("Ошибка при выполнении операции")

# Преобразование массива NumPy в UImageRGB
arr = np.array([
          [[1., 0, 0], [1., 0, 0], [1., 0, 0]],
          [[1., 0, 0], [1., 0, 0], [1., 0, 0]]
      ], dtype=np.float32)
print(arr.shape)  # (2, 3, 3)
print(arr.dtype)  # float32
img = UHelperNP.npfloat_to_uimage(arr)
if img:
    print(img)     # UImageRGB(width=3, height=2)
    print(img.arr)
    # [255, 0, 0,   255, 0, 0,   255, 0, 0,
    #  255, 0, 0,   255, 0, 0,   255, 0, 0]
else:
    print("Ошибка при выполнении операции")

# Преобразование массива NumPy в UImageGray
arr = np.array([
          [1., 1., 1.],
          [1., 1., 1.]
      ], dtype=np.float32)
print(arr.shape)  # (2, 3)
print(arr.dtype)  # float32
img = UHelperNP.npfloat_to_uimage(arr)
if img:
    print(img)     # UImageGray(width=3, height=2)
    print(img.arr) # [255, 255, 255,   255, 255, 255]
else:
    print("Ошибка при выполнении операции")

По умолчанию нормализация диапазона значений не выполняется. При этом некорректное значение не приведет к переполнению стека и полной инверсии цвета, но выполнение преобразований станет невозможным:

import numpy as np
from unicross_image.uhelper_np import UHelperNP

arr = np.array([
          [1.0039216, 1., 1.],
          [1., 1., 1.]
      ], dtype=np.float32)
img = UHelperNP.npfloat_to_uimage(arr)
print(img.arr)         # [256, 255, 255,   255, 255, 255]
print(img.is_normal()) # False

Если в параметре is_normalize задано значение True, то будет выполнена нормализация диапазона значений:

import numpy as np
from unicross_image.uhelper_np import UHelperNP

arr = np.array([
          [1.0039216, 1., 1.],
          [1., 1., 1.]
      ], dtype=np.float32)
img = UHelperNP.npfloat_to_uimage(arr, is_normalize=True)
print(img.arr)         # [255, 255, 255,   255, 255, 255]
print(img.is_normal()) # True

Класс входит в состав графической библиотеки UImage для Python 3. Описание библиотеки UImage

Категория: UImage | Просмотров: 5 | Добавил: unicross | Теги: NumPy, UHelperNP, UImageGray, UImage | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Категории раздела
Списки слов [10]
Списки слов и словари
OCR [4]
Оптическое распознавание символов
UImage [80]
Графическая библиотека для Python
UImage C [7]
Графическая библиотека для Python
Программы [4]
Полезные программы
Прочее [3]
Другие темы
Календарь
«  Декабрь 2025  »
Пн Вт Ср Чт Пт Сб Вс
1234567
891011121314
15161718192021
22232425262728
293031