Я хочу написать коды, которые могут отображать гистограмму изображения без использования встроенной функции гистограммы Matplotlib.Создать гистограмму изображения вручную и эффективно в Python
Вот мои коды:
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
def manHist(img):
row, col = img.shape # img is a grayscale image
y = np.zeros((256), np.uint64)
for i in range(0,row):
for j in range(0,col):
y[img[i,j]] += 1
x = np.arange(0,256)
plt.bar(x,y,color="gray",align="center")
plt.show()
def main():
img = cv.imread("C:/Users/Kadek/Documents/MATLAB/2GS.jpg")
manHist(img)
main()
Мой вопрос, есть более ЭФФЕКТИВНЫЙ способ сделать массив частоты значений пикселей без использования для цикла?
Там нет другого чем прохождение через каждое значение изображения, хотя векторизованное решение numpy будет на несколько порядков быстрее –
Итак, вы не используете третью ось каналов, как у вас: 'y [img [i, j]]'? – Divakar
Для этого вы можете использовать 'collections.Counter', хотя это может и не быть« ручным »для вас. – kindall