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