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()
私の質問は、forループを使用せずに、画素値周波数の配列を作るために、よりefficentの方法は何ですか?
A numpyのベースベクトル化ソリューションはnp.bincount
となり
を他はありませんイメージ内のすべての値を歩くよりも、ベクトル化されていますnumpyの解が数桁速くなります –
したがって、チャンネルの3番目の軸を使っていません: 'y [img [i、j]]'? – Divakar
これは 'collections.Counter'を使っても構いませんが、それはあなたには「マニュアル」ではないかもしれません。 – kindall