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