Главная » 2025 » Декабрь » 22 » Преобразование цветного изображения в оттенки серого
21:51
Преобразование цветного изображения в оттенки серого

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

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

UHelperNP.uimagergb_grayscale(<UImageRGB>, method="Rec601",
                               is_round=True, is_normalize=False)

В качестве первого параметра указывается объект UImageRGB. Параметр method задает способ преобразования в виде значений:

"Rec601" (0.298912R + 0.586611G + 0.114478B)
"Rec709" (0.212656R + 0.715158G + 0.072186B)

Если в параметре is_round указано значение True, то будет выполнено округление значений с помощью функции round() из библиотеки NumPy. Если в параметре is_normalize задано значение True, то перед преобразованием будет выполнена нормализация диапазона значений. По умолчанию нормализация не выполняется. Метод возвращает объект UImageGray или значение None в случае ошибки. Операция выполняется с помощью библиотеки NumPy.

Выполним преобразование разными способами и измерим время выполнения:

import time
from unicross_image.uimagergb import UImageRGB
from unicross_image.uhelper_np import UHelperNP
from unicross_image.uimagergbchange import UImageRGBChange

img = UImageRGB.load("foto.jpg")
t1 = time.time()
img2 = UImageRGBChange.grayscale_im(img, method="Rec601Luma")
print(time.time() - t1) # 0.031250953674316406
if img2:
    print(img2) # UImageGray(width=500, height=333)
    img2.save("test.png")
else:
    print("Ошибка при выполнении операции")

t1 = time.time()
img2 = UHelperNP.uimagergb_grayscale(img, method="Rec601", is_round=True)
print(time.time() - t1) # 0.06250286102294922
if img2:
    print(img2) # UImageGray(width=500, height=333)
    img2.save("test2.png")
else:
    print("Ошибка при выполнении операции")

t1 = time.time()
img2 = img.get_uimagegray()
print(time.time() - t1) # 0.17188429832458496
if img2:
    print(img2) # UImageGray(width=500, height=333)
    img2.save("test3.png")
else:
    print("Ошибка при выполнении операции")

Преобразование изображения в оттенках серого в черно-белое

Объект UImageGray может хранить черно-белое изображение, т. е. изображение в котором присутствуют только два цвета: 0 (черный) и 255 (белый). Преобразовать объект UImageGray в черно-белое изображение позволяет статический метод uimagegray_to_bw() из класса UHelperNP. Формат метода:

UHelperNP.uimagegray_to_bw(<UImageGray>, <Порог>)

В качестве первого параметра указывается объект UImageGray. Во втором параметре задается число от 0 до 255. Все пиксели со значением меньшим или равным этому числу станут черными, а все остальные пиксели станут белыми. Метод возвращает объект UImageGray, если операция выполнена успешно, и None — в противном случае. Операция выполняется с помощью библиотеки NumPy. Пример:

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

img = UImageGray(3, 2)
img.arr = [0, 64, 128, 200, 254, 255]
img2 = UHelperNP.uimagegray_to_bw(img, 254)
print(img2.arr)     # [0, 0, 0, 0, 0, 255]
img.arr = [0, 64, 128, 200, 254, 255]
img3 = UHelperNP.uimagegray_to_bw(img, 128)
print(img3.arr)     # [0, 0, 0, 255, 255, 255]

Выполним преобразование разными способами и измерим время выполнения:

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

img = UImageGray.load("foto.jpg")
print(img) # UImageGray(width=500, height=333)

t1 = time.time()
img2 = UHelperNP.uimagegray_to_bw(img, 128)
print(time.time() - t1) # 0.01562356948852539
img2.save("test.png")

t1 = time.time()
img.bw(128)
print(time.time() - t1) # 0.03125286102294922
img.save("test2.png")

Проверить, является ли изображение черно-белым, позволяет позволяет статический метод uimagegray_is_bw() из класса UHelperNP. Формат метода:

UHelperNP.uimagegray_is_bw(<UImageGray>)

В качестве параметра указывается объект UImageGray. Метод возвращает значение True, если в изображении присутствуют только два цвета: 0 (черный) и 255 (белый), и False — в противном случае. Значение False возвращается также при наличии ошибки. Операция выполняется с помощью библиотеки NumPy. Пример:

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

img = UImageGray(3, 2)
print(img.arr)     # [255, 255, 255, 255, 255, 255]
print(UHelperNP.uimagegray_is_bw(img)) # True
img.arr = [0, 64, 128, 200, 254, 255]
print(UHelperNP.uimagegray_is_bw(img)) # False
img = UHelperNP.uimagegray_to_bw(img, 254)
print(img.arr)     # [0, 0, 0, 0, 0, 255]
print(UHelperNP.uimagegray_is_bw(img)) # True

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

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