Преобразование объекта изображения в объект UMat и наоборот
Преобразовать объект изображения в объект UMat с типом Type_64F позволяет статический метод uimage_to_umat64f() из класса UHelperNP. Формат метода:
UHelperNP.uimage_to_umat64f(<UImage>, is_normalize=False)
В первом параметре указывается объект изображения UImage, UImageRGB или UImageGray. Если в параметре is_normalize задано значение True, то перед преобразованием будет выполнена нормализация диапазона значений. По умолчанию нормализация не выполняется. Метод возвращает объект UMat с типом Type_64F в диапазоне значений от 0.0 до 1.0 или значение None в случае ошибки.
Создать объект изображения на основе объекта UMat с типом Type_64F (в диапазоне значений от 0.0 до 1.0) позволяет статический метод umat64f_to_uimage() из класса UHelperNP. Формат метода:
UHelperNP.umat64f_to_uimage(<UMat>, is_normalize=False)
В качестве первого параметра указывается объект UMat с типом Type_64F. Если в параметре is_normalize задано значение True, то будет выполнена нормализация диапазона значений. По умолчанию нормализация не выполняется. Метод возвращает объект изображения UImage, UImageRGB или UImageGray в зависимости от количества каналов или значение None в случае ошибки.
Пример преобразования UImage в UMat и наоборот:
from unicross_image.ucolor import UColor
from unicross_image.uimage import UImage
from unicross_image.uhelper_np import UHelperNP
# Преобразование UImage в UMat
img = UImage(3, 2, UColor(255, 0, 0, 128))
m = UHelperNP.uimage_to_umat64f(img)
if m:
print(m.arr)
# [1.0, 0.0, 0.0, 0.5019607843137255,
# 1.0, 0.0, 0.0, 0.5019607843137255,
# 1.0, 0.0, 0.0, 0.5019607843137255,
# 1.0, 0.0, 0.0, 0.5019607843137255,
# 1.0, 0.0, 0.0, 0.5019607843137255,
# 1.0, 0.0, 0.0, 0.5019607843137255]
else:
print("Ошибка при выполнении операции")
# Преобразование UMat в UImage
img = UHelperNP.umat64f_to_uimage(m)
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("Ошибка при выполнении операции")
Пример преобразования UImageRGB в UMat и наоборот:
from unicross_image.ucolor import UColor
from unicross_image.uimagergb import UImageRGB
from unicross_image.uhelper_np import UHelperNP
# Преобразование UImageRGB в UMat
img = UImageRGB(3, 2, UColor(255, 0, 0))
m = UHelperNP.uimage_to_umat64f(img)
if m:
print(m.arr)
# [1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0,
# 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0]
else:
print("Ошибка при выполнении операции")
# Преобразование UMat в UImageRGB
img = UHelperNP.umat64f_to_uimage(m)
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("Ошибка при выполнении операции")
Пример преобразования UImageGray в UMat и наоборот:
from unicross_image.uimagegray import UImageGray
from unicross_image.uhelper_np import UHelperNP
# Преобразование UImageGray в UMat
img = UImageGray(3, 2, 255)
m = UHelperNP.uimage_to_umat64f(img)
if m:
print(m.arr) # [1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
else:
print("Ошибка при выполнении операции")
# Преобразование UMat в UImageGray
img = UHelperNP.umat64f_to_uimage(m)
if img:
print(img) # UImageGray(width=3, height=2)
print(img.arr) # [255, 255, 255, 255, 255, 255]
else:
print("Ошибка при выполнении операции")
По умолчанию нормализация диапазона значений не выполняется. При этом некорректное значение не приведет к переполнению стека и полной инверсии цвета, но выполнение преобразований станет невозможным:
from unicross_image.uimagegray import UImageGray
from unicross_image.uhelper_np import UHelperNP
# Преобразование UImageGray в UMat без нормализации
img = UImageGray(3, 2, 255)
img.arr[0] = 256
m = UHelperNP.uimage_to_umat64f(img)
if m:
print(m.arr) # [1.003921568627451, 1.0, 1.0, 1.0, 1.0, 1.0]
else:
print("Ошибка при выполнении операции")
# Преобразование UMat в UImageGray без нормализации
m.arr[0] = 1.003921568627451
img = UHelperNP.umat64f_to_uimage(m)
if img:
print(img) # UImageGray(width=3, height=2)
print(img.arr) # [256, 255, 255, 255, 255, 255]
print(img.is_normal()) # False
else:
print("Ошибка при выполнении операции")
Если в параметре is_normalize задано значение True, то будет выполнена нормализация диапазона значений:
from unicross_image.uimagegray import UImageGray
from unicross_image.uhelper_np import UHelperNP
# Преобразование UImageGray в UMat с нормализацией
img = UImageGray(3, 2, 255)
img.arr[0] = 256
m = UHelperNP.uimage_to_umat64f(img, is_normalize=True)
if m:
print(m.arr) # [1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
else:
print("Ошибка при выполнении операции")
# Преобразование UMat в UImageGray с нормализацией
m.arr[0] = 1.003921568627451
img = UHelperNP.umat64f_to_uimage(m, is_normalize=True)
if img:
print(img) # UImageGray(width=3, height=2)
print(img.arr) # [255, 255, 255, 255, 255, 255]
print(img.is_normal()) # True
else:
print("Ошибка при выполнении операции")
Класс входит в состав графической библиотеки UImage для Python 3. Описание библиотеки UImage