Главная » 2025 » Декабрь » 05 » Класс UMask: получение информации об объекте
20:40
Класс UMask: получение информации об объекте

Класс UMask: получение информации об объекте

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

  • get_x() и get_y() — возвращают координаты левого верхнего угла по осям X и Y соответственно. Пример:
from unicross_image.uimagegray import UMask

mask = UMask(3, 2, x=10, y=20, value=True)
print(mask.get_x())  # 10
print(mask.get_y())  # 20
  • get_point() — возвращает объект UPoint с координатами левого верхнего угла. Пример:
print(mask.get_point())  # UPoint(x=10, y=20)
x, y = mask.get_point()
print(x)                  # 10
print(y)                  # 20
  • get_width() и get_height() — возвращают ширину и высоту соответственно. Пример:
w = mask.get_width()
h = mask.get_height()
print(w, h) # 3 2
  • get_size() —  возвращает объект USize с размерами изображения. Пример:
s = mask.get_size()
print(s)                # USize(width=3, height=2)
w = s.get_width()
h = s.get_height()
print(w, h)             # 3 2
w, h = mask.get_size()
print(w, h)             # 3 2
  • get_rect() — возвращает объект URect с координатами и размерами изображения. Пример:
r = mask.get_rect()
print(r)       # URect(x=10, y=20, width=3, height=2)
x = r.get_x()
y = r.get_y()
w = r.get_width()
h = r.get_height()
print(x, y, w, h)             # 10 20 3 2
x, y, w, h = mask.get_rect()
print(x, y, w, h)             # 10 20 3 2
  • get_num_channels() — возвращает число каналов. Пример:
print(mask.get_num_channels()) # 1
  • get_img_mode() — возвращает режим изображения в виде строки. Пример:
print(mask.get_img_mode()) # BW
  • get_mat_type() — возвращает тип матрицы (значение UMat.Type_8B). Пример:
print(mask.get_mat_type()) # 3
  • get_arr_len() — возвращает количество элементов списка arr, в котором хранится изображение. При этом вычисление размера списка не производится. Размер списка вычисляется только при создании объекта и при вызове метода update_arr_len(). Если объект не является валидным, то значение, возвращаемое методом, будет неправильным. Пример:
print(mask.get_arr_len()) # 6
print(len(mask.arr))      # 6
  • update_arr_len() — обновляет информацию о размере списка с изображением. Ничего не возвращает;
  • is_valid() — возвращает значение True, если объект изображения является валидным, и False — в противном случае. Проверяется соответствие размеров изображения размеру списка. Содержимое списка не проверяется. Пример:
img = UMask(300, 200)
print(img.is_valid())      # True
img2 = UMask(3, 2, create_arr=False)
print(img2.arr)            # []
print(img2.get_arr_len())  # 0

img2.arr = [True] * 6      # Добавляем существующий список
print(img2.is_valid())     # False
img2.update_arr_len()      # Обновление данных
print(img2.is_valid())     # True
print(img2.get_arr_len())  # 6

Получение и изменение пикселей изображения

В основе объекта изображения лежит одномерный список, доступный через атрибут arr. Размер списка вычисляется следующим образом:

arr_len = width * height

Строки двумерной матрицы записываются в список слева направо и сверху вниз. Вычисление положения элемента внутри списка arr, при известных координатах x и y, производится по следующей формуле:

i = x + y * width

Пример заливки всего изображения цветом фона:

from unicross_image.uimagegray import UMask

img = UMask(3, 2, value=True)
print(img.arr) # [True, True, True, True, True, True]

img_width = img.get_width()
img_height = img.get_height()
img_arr = img.arr
for y in range(img_height):
    for x in range(img_width):
        i = x + y * img_width
        img_arr[i] = False
print(img.arr) # [False, False, False, False, False, False]

Учитывая, что положение пикселя по осям X и Y в этой задаче нам не нужно, будем работать с одномерным списком:

from unicross_image.uimagegray import UMask

img = UMask(3, 2, value=True)
print(img.arr) # [True, True, True, True, True, True]

img_arr_len = img.get_arr_len()
img_arr = img.arr
for i in range(img_arr_len):
    img_arr[i] = False
print(img.arr) # [False, False, False, False, False, False]

В нашей задаче одно значение должно заполнить весь список. Для этого перебирать все значения списка не нужно, достаточно создать список заново средствами языка Python:

from unicross_image.uimagegray import UMask

img = UMask(3, 2, value=True)
print(img.arr) # [True, True, True, True, True, True]

img.arr = [False] * img.get_arr_len()
print(img.arr) # [False, False, False, False, False, False]
print(img.is_valid())        # True

Инверсия цвета

Инвертировать цвет всех пикселей позволяет метод invert(). Метод возвращает значение True, если операция выполнена успешно, и False — в противном случае. Пример преобразования белого цвета в черный:

from unicross_image.uimagegray import UMask

img = UMask(3, 2, value=True)
print(img.arr) # [True, True, True, True, True, True]
print(img.invert()) # True
print(img.arr) # [False, False, False, False, False, False]

Создание копии объекта

Создать копию объекта позволяет метод copy(). Если операция выполнена успешно, то метод вернет копию объекта, а в противном случае — значение None. Пример:

from unicross_image.uimagegray import UMask

img = UMask(3, 2, x=10, y=20, value=True)
print(img.arr)         # [True, True, True, True, True, True]
img2 = img.copy()
print(img2)            # UMask(width=3, height=2, x=10, y=20)
print(img2 is img)     # False
img2.arr[0] = False
print(img2.arr)        # [False, True, True, True, True, True]
print(img.arr)         # [True, True, True, True, True, True]

Если объект изображения не является валидным, то метод вернет значение None:

img3 = UMask(3, 2, create_arr=False)
img4 = img3.copy()
print(img4)            # None

Если просто присвоить объект другой переменной, то будет скопирована лишь ссылка на объект, а не сам объект:

img2 = img
print(img2)            # UMask(width=3, height=2, x=10, y=20)
print(img2 is img)     # True
img2.arr[0] = False
print(img2.arr)        # [False, True, True, True, True, True]
print(img.arr)         # [False, True, True, True, True, True]

Как видно из результата, изменение списка через один объект, привело к изменению списка в другом объекте. Иными словами, оба объекта ссылаются на один и тот же список.

Сравнение объектов

Сравнить два объекта можно с помощью операторов == и !=.Пример:

from unicross_image.uimagegray import UMask

img = UMask(3, 2, value=True)
img2 = UMask(3, 2, value=True)
img3 = UMask(3, 2, value=False)

print(img == img2)     # True
print(img == img3)     # False

print(img != img2)     # False
print(img != img3)     # True

Для проверки, ссылаются ли две переменные на один и тот же объект, нужно использовать оператор is:

img4 = img
print(img is img4)     # True
print(img is img2)     # False

Строка в формате BWSTR

Строка в формате BWSTR может содержать только два значения:

  • 0 — означает фон или область вне зоны интереса (соответствует значению False);
  • 1 — означает часть объекта или область зоны интереса (соответствует значению True).

Строки двумерной матрицы записываются слева направо и сверху вниз. Точно так же, как в список arr.

Преобразование объекта UMask в строку в формате BWSTR и наоборот

Преобразовать объект UMask в строку в формате BWSTR позволяет метод get_bwstr() из класса UMask. В случае ошибки метод вернет значение None. Пример:

from unicross_image.uimagegray import UMask

img = UMask(3, 2, x=10, y=20, create_arr=False)
print(img.is_valid())     # False
print(img.get_bwstr())    # None

img.arr = [True, True, True,   False, False, False]
img.update_arr_len()      # Обновление данных
print(img.is_valid())     # True
print(img.get_bwstr())    # 111000

Создать объект UMask на основе строки в формате BWSTR позволяет статический метод from_bwstr() из класса UMask. Формат метода:

UMask.from_bwstr(<Ширина>, <Высота>, <BWSTR>, x=0, y=0)

В первом параметре указывается ширина изображения, а во втором — его высота. В третьем параметре задается строка в формате BWSTR. Необязательные параметры x и y  позволяют задать координаты. Если операция выполнена успешно, то метод вернет объект UMask, а в противном случае — значение None. Пример:

from unicross_image.uimagegray import UMask

bwstr = "111000"
img = UMask.from_bwstr(3, 2, bwstr, x=10, y=20)
print(img)        # UMask(width=3, height=2, x=10, y=20)
print(img.arr)    # [True, True, True,   False, False, False]

bwstr = "222000"
img = UMask.from_bwstr(3, 2, bwstr, x=10, y=20)
print(img)        # None

Сохраним все параметры маски в файл, а затем загрузим их из файла и создадим объект маски:

from unicross_image.uimagegray import UMask

mask = UMask(3, 2, x=10, y=20)
mask.arr = [True, True, True,   False, False, False]
x, y, w, h = mask.get_rect()
bwstr = mask.get_bwstr()
data = "{0}|{1}|{2}|{3}|{4}".format(x, y, w, h, bwstr)
# Сохранение маски в файл
with open("test.txt", "w", encoding="utf-8") as f:
    f.write(data)
# Загрузка маски из файла
with open("test.txt", "r", encoding="utf-8") as f:
    d = f.read()
a = d.strip().split("|")
x, y, w, h = int(a[0]), int(a[1]), int(a[2]), int(a[3])
mask = UMask.from_bwstr(w, h, a[4], x=x, y=y)
print(mask)        # UMask(width=3, height=2, x=10, y=20)
print(mask.arr)    # [True, True, True,   False, False, False]

Преобразование объекта UImageGray в строку в формате BWSTR и наоборот

Преобразовать черно-белое изображение, хранимое в объекте UImageGray, в строку в формате BWSTR позволяет статический метод uimagegray_to_bwstr() из класса UMask. Формат метода:

UMask.uimagegray_to_bwstr(<UImageGray>)

В качестве параметра указывается черно-белое изображение. Если изображение не является черно-белым, а также в случае ошибки метод вернет значение None. Пример:

from unicross_image.uimagegray import UImageGray, UMask

img = UImageGray(3, 2)
img.arr = [255, 255, 255,   0, 0, 0]
print(UMask.uimagegray_to_bwstr(img))    # 111000

img.arr = [255, 255, 255,   128, 128, 128]
print(UMask.uimagegray_to_bwstr(img))    # None

Создать объект UImageGray на основе строки в формате BWSTR позволяет статический метод bwstr_to_uimagegray() из класса UMask. Формат метода:

UMask.bwstr_to_uimagegray(<Ширина>, <Высота>, <BWSTR>)

В первом параметре указывается ширина изображения, а во втором — его высота. В третьем параметре задается строка в формате BWSTR. Если операция выполнена успешно, то метод вернет объект UImageGray, а в противном случае — значение None. Пример:

from unicross_image.uimagegray import UMask

bwstr = "111000"
img = UMask.bwstr_to_uimagegray(3, 2, bwstr)
print(img)        # UImageGray(width=3, height=2)
print(img.arr)    # [255, 255, 255,   0, 0, 0]

bwstr = "222000"
img = UMask.bwstr_to_uimagegray(3, 2, bwstr)
print(img)        # None

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

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