UImageGray: вычисление гистограммы
Вычислить гистограмму позволяет статический метод uimagegray_histogram() из класса UHelperNP. Формат метода:
UHelperNP.uimagegray_histogram(<UImageGray>)
В качестве параметра указывается объект UImageGray. Метод возвращает объект UMat из 257 элементов или значение None в случае ошибки. Первые 256 элементов списка содержат распределение пикселей. Индексы списка совпадают с кодом цвета, а значения показывают числа пикселей с кодом. Последний элемент списка содержит общее число пикселей. Операция выполняется с помощью библиотеки NumPy. Пример:
from unicross_image.uimagegray import UImageGray
from unicross_image.uhelper_np import UHelperNP
img = UImageGray(3, 2)
img.arr = [0, 0, 128, 255, 255, 255]
hist = UHelperNP.uimagegray_histogram(img)
if hist:
print(hist.width) # 257 (ширина)
print(hist.height) # 1 (высота)
print(hist.num_channels) # 1 (число каналов)
print(len(hist.arr)) # 257
print(hist.mat_type) # 6 (тип данных UMat.Type_32S)
print(hist.arr[0]) # 2 (число черных пикселей)
print(hist.arr[255]) # 3 (число белых пикселей)
print(hist.arr[128]) # 1 (число пикселей с цветом 128)
print(hist.arr[64]) # 0 (число пикселей с цветом 64)
print(hist.arr[256]) # 6 (число всех пикселей)
else:
print("Ошибка при выполнении операции")
Для вычисления гистограммы можно также воспользоваться статическим методом uimagegray_histogram_nd() из класса UHelperNP. Формат метода:
UHelperNP.uimagegray_histogram_nd(<UImageGray>)
В качестве параметра указывается объект UImageGray. Метод возвращает кортеж из двух элементов (counts, bins) или значение None в случае ошибки. 256 элементов NumPy массива counts содержат распределение пикселей. Индексы массива совпадают с кодом цвета, а значения показывают числа пикселей с кодом. 257 элементов NumPy массива bins содержат метки для графика. Операция выполняется с помощью библиотеки NumPy. Пример:
from unicross_image.uimagegray import UImageGray
from unicross_image.uhelper_np import UHelperNP
img = UImageGray(3, 2)
img.arr = [0, 0, 128, 255, 255, 255]
histogram = UHelperNP.uimagegray_histogram_nd(img)
if histogram:
hist, bins = histogram
print(hist.shape) # (256,)
print(hist.dtype) # int64
print(bins.shape) # (257,)
print(bins.dtype) # float64
print(hist[0]) # 2 (число черных пикселей)
print(bins[0]) # 0.0
print(hist[255]) # 3 (число белых пикселей)
print(bins[255]) # 255.0
print(hist[128]) # 1 (число пикселей с цветом 128)
print(bins[128]) # 128.0
print(hist[64]) # 0 (число пикселей с цветом 64)
print(bins[64]) # 64.0
else:
print("Ошибка при выполнении операции")
Отобразить график plot() с гистограммой в диалоговом окне можно так:
from unicross_image.uimagegray import UImageGray
from unicross_image.uhelper_np import UHelperNP
import matplotlib.pyplot as plt
img = UImageGray.load("foto.jpg")
counts, bins = UHelperNP.uimagegray_histogram_nd(img)
fig, ax = plt.subplots()
ax.set_title("Гистограмма")
ax.set_xlabel("Значение цвета")
ax.set_ylabel("Количество пикселей")
ax.set_xlim([0, 255])
ax.plot(bins[:-1], counts)
plt.show()
Отобразить график stairs() с гистограммой в диалоговом окне можно так:
from unicross_image.uimagegray import UImageGray
from unicross_image.uhelper_np import UHelperNP
import matplotlib.pyplot as plt
img = UImageGray.load("foto.jpg")
counts, bins = UHelperNP.uimagegray_histogram_nd(img)
fig, ax = plt.subplots()
ax.set_title("Гистограмма")
ax.set_xlabel("Значение цвета")
ax.set_ylabel("Количество пикселей")
ax.set_xlim([0, 255])
ax.stairs(counts, bins)
plt.show()
Отобразить график hist() с гистограммой в диалоговом окне можно так:
from unicross_image.uimagegray import UImageGray
from unicross_image.uhelper_np import UHelperNP
import matplotlib.pyplot as plt
from matplotlib.ticker import FixedLocator
img = UImageGray.load("foto.jpg")
counts, bins = UHelperNP.uimagegray_histogram_nd(img)
fig, ax = plt.subplots()
ax.set_title("Гистограмма")
ax.set_xlabel("Значение цвета")
ax.set_ylabel("Количество пикселей")
ax.set_xlim([-5, 260])
ax.xaxis.set_major_locator(FixedLocator([0, 64, 128, 192, 255]))
ax.hist(bins[:-1], bins, weights=counts)
plt.show()
Если нужно просто посмотреть гистограмму в диалоговом окне, то следует воспользоваться следующим кодом:
from unicross_image.uimagegray import UImageGray
from unicross_image.uhelper_np import UHelperNP
import matplotlib.pyplot as plt
img = UImageGray.load("foto.jpg")
fig, ax = plt.subplots()
ax.set_title("Гистограмма")
ax.set_xlabel("Значение цвета")
ax.set_ylabel("Количество пикселей")
ax.set_xlim([0, 255])
ax.hist(img.arr, bins=range(256))
plt.show()
Класс входит в состав графической библиотеки UImage для Python 3. Описание библиотеки UImage