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

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

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

  • uimage_to_ndimage() — возвращает массив с типом uint8 (диапазон значений от 0 до 255). Такой массив удобно использовать для отображения на экране или для сохранения в файл, но неудобно обрабатывать;
  • uimage_to_npint() — возвращает массив с типом int32 (с сохранением диапазона значений от 0 до 255). Такой массив удобно в дальнейшем обрабатывать, так как нет опасности переполнения стека;
  • uimage_to_npuint16() — возвращает массив с типом uint16 (диапазон значений от 0 до 65 535). Такой массив удобно в дальнейшем обрабатывать, так как нет усечения значений при округлении, но есть опасность переполнения стека;
  • uimage_to_npfloat32() — возвращает массив с типом float32 (диапазон значений от 0.0 до 1.0).. Такой массив удобно в дальнейшем обрабатывать, так как нет опасности переполнения стека и усечения значений при округлении. Потребляет в два раза меньше памяти, чем при использовании типа float64. Самый оптимальный вариант для обработки изображения;
  • uimage_to_npfloat64() — возвращает массив с типом float64 (диапазон значений от 0.0 до 1.0).. Такой массив удобно в дальнейшем обрабатывать, так как нет опасности переполнения стека и усечения значений при округлении. При этом он требует большого объема памяти.

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

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

UHelperNP.uimage_to_ndimage(<UImage>, is_normalize=False)

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

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

from unicross_image.ucolor import UColor
from unicross_image.uimage import UImage, UImageRGB, UImageGray
from unicross_image.uhelper_np import UHelperNP

# Преобразование UImage в массив NumPy
img = UImage(3, 2, UColor(255, 0, 0, 128))
arr = UHelperNP.uimage_to_ndimage(img)
if arr is not None:
    print(arr.shape)  # (2, 3, 4)
    print(arr.dtype)  # uint8
    print(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("Ошибка при выполнении операции")

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

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

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

from unicross_image.uimagegray import UImageGray
from unicross_image.uhelper_np import UHelperNP

img = UImageGray(3, 2, 255)
img.arr[0] = 256
arr = UHelperNP.uimage_to_ndimage(img)
print(arr)
# Переполнение стека !!! 256 -> 0
# [[  0 255 255]
#  [255 255 255]]

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

from unicross_image.uimagegray import UImageGray
from unicross_image.uhelper_np import UHelperNP

img = UImageGray(3, 2, 255)
img.arr[0] = 256
arr = UHelperNP.uimage_to_ndimage(img, is_normalize=True)
print(arr)
# OK/ 256 -> 255
# [[255 255 255]
#  [255 255 255]]

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

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

UHelperNP.uimage_to_npint(<UImage>, is_normalize=False)

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

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

from unicross_image.ucolor import UColor
from unicross_image.uimage import UImage, UImageRGB, UImageGray
from unicross_image.uhelper_np import UHelperNP

# Преобразование UImage в массив NumPy
img = UImage(3, 2, UColor(255, 0, 0, 128))
arr = UHelperNP.uimage_to_npint(img)
if arr is not None:
    print(arr.shape)  # (2, 3, 4)
    print(arr.dtype)  # int32
    print(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("Ошибка при выполнении операции")

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

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

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

from unicross_image.uimagegray import UImageGray
from unicross_image.uhelper_np import UHelperNP

img = UImageGray(3, 2, 255)
img.arr[0] = 256
arr = UHelperNP.uimage_to_npint(img)
print(arr)
# 256 -> 256
# [[256 255 255]
#  [255 255 255]]

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

from unicross_image.uimagegray import UImageGray
from unicross_image.uhelper_np import UHelperNP

img = UImageGray(3, 2, 255)
img.arr[0] = 256
arr = UHelperNP.uimage_to_npint(img, is_normalize=True)
print(arr)
# 256 -> 255
# [[255 255 255]
#  [255 255 255]]

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

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

UHelperNP.uimage_to_npuint16(<UImage>, is_normalize=False)

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

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

from unicross_image.ucolor import UColor
from unicross_image.uimage import UImage, UImageRGB, UImageGray
from unicross_image.uhelper_np import UHelperNP

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

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

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

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

from unicross_image.uimagegray import UImageGray
from unicross_image.uhelper_np import UHelperNP

img = UImageGray(3, 2, 255)
img.arr[0] = -1
arr = UHelperNP.uimage_to_npuint16(img)
print(arr)
# Ошибка !!! -1 -> 65279
# [[65279 65535 65535]
#  [65535 65535 65535]]

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

from unicross_image.uimagegray import UImageGray
from unicross_image.uhelper_np import UHelperNP

img = UImageGray(3, 2, 255)
img.arr[0] = -1
arr = UHelperNP.uimage_to_npuint16(img, is_normalize=True)
print(arr)
# OK.  -1 -> 0
# [[    0 65535 65535]
#  [65535 65535 65535]]

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

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

UHelperNP.uimage_to_npfloat32(<UImage>, is_normalize=False)

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

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

from unicross_image.ucolor import UColor
from unicross_image.uimage import UImage, UImageRGB, UImageGray
from unicross_image.uhelper_np import UHelperNP

# Преобразование UImage в массив NumPy
img = UImage(3, 2, UColor(255, 0, 0, 128))
arr = UHelperNP.uimage_to_npfloat32(img)
if arr is not None:
    print(arr.shape)  # (2, 3, 4)
    print(arr.dtype)  # float32
    print(arr)
    # [[[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]]]
else:
    print("Ошибка при выполнении операции")

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

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

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

from unicross_image.uimagegray import UImageGray
from unicross_image.uhelper_np import UHelperNP

img = UImageGray(3, 2, 255)
img.arr[0] = 256
arr = UHelperNP.uimage_to_npfloat32(img)
print(arr)
# 256 -> 1.0039216
# [[1.0039216 1.        1.       ]
#  [1.        1.        1.       ]]

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

from unicross_image.uimagegray import UImageGray
from unicross_image.uhelper_np import UHelperNP

img = UImageGray(3, 2, 255)
img.arr[0] = 256
arr = UHelperNP.uimage_to_npfloat32(img, is_normalize=True)
print(arr)
# 256 -> 1.
# [[1. 1. 1.]
#  [1. 1. 1.]]

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

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

UHelperNP.uimage_to_npfloat64(<UImage>, is_normalize=False)

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

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

from unicross_image.ucolor import UColor
from unicross_image.uimage import UImage, UImageRGB, UImageGray
from unicross_image.uhelper_np import UHelperNP

# Преобразование UImage в массив NumPy
img = UImage(3, 2, UColor(255, 0, 0, 128))
arr = UHelperNP.uimage_to_npfloat64(img)
if arr is not None:
    print(arr.shape)  # (2, 3, 4)
    print(arr.dtype)  # float64
    print(arr)
    # [[[1.         0.         0.         0.50196078]
    #   [1.         0.         0.         0.50196078]
    #   [1.         0.         0.         0.50196078]]
    # 
    #  [[1.         0.         0.         0.50196078]
    #   [1.         0.         0.         0.50196078]
    #   [1.         0.         0.         0.50196078]]]
else:
    print("Ошибка при выполнении операции")

# Преобразование UImageRGB в массив NumPy
img = UImageRGB(3, 2, UColor(255, 0, 0))
arr = UHelperNP.uimage_to_npfloat64(img)
if arr is not None:
    print(arr.shape)  # (2, 3, 3)
    print(arr.dtype)  # float64
    print(arr)
    # [[[1. 0. 0.]
    #   [1. 0. 0.]
    #   [1. 0. 0.]]
    # 
    #  [[1. 0. 0.]
    #   [1. 0. 0.]
    #   [1. 0. 0.]]]
else:
    print("Ошибка при выполнении операции")

# Преобразование UImageGray в массив NumPy
img = UImageGray(3, 2, 255)
arr = UHelperNP.uimage_to_npfloat64(img)
if arr is not None:
    print(arr.shape)  # (2, 3)
    print(arr.dtype)  # float64
    print(arr)
    # [[1. 1. 1.]
    #  [1. 1. 1.]]
else:
    print("Ошибка при выполнении операции")

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

from unicross_image.uimagegray import UImageGray
from unicross_image.uhelper_np import UHelperNP

img = UImageGray(3, 2, 255)
img.arr[0] = 256
arr = UHelperNP.uimage_to_npfloat64(img)
print(arr)
# 256 -> 1.00392157
# [[1.00392157 1.         1.        ]
#  [1.         1.         1.        ]]

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

from unicross_image.uimagegray import UImageGray
from unicross_image.uhelper_np import UHelperNP

img = UImageGray(3, 2, 255)
img.arr[0] = 256
arr = UHelperNP.uimage_to_npfloat64(img, is_normalize=True)
print(arr)
# 256 -> 1.
# [[1. 1. 1.]
#  [1. 1. 1.]]

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

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