Преобразование объекта изображения в массив 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