MathematicaのHistogram3Dは見にくくて、bivariateな分布が見辛いので、無理矢理ListDensityPlotにしてましたが、かなり遅いので、他の方法を探してたら、pythonでmatplotlibなるものを発見。使ってみました。
本来は違うグラフを書くのが目的でしたが、練習として画像のrgbヒストグラムを出力するプログラムを書いてみました。
--------------以下ソース--------------
--------------コマンドプロンプト--------------
$:python hist.py [入力画像] [出力画像]
--------------
プログラムを使うとこんな画像が
こんな感じに出力されます。
本来は違うグラフを書くのが目的でしたが、練習として画像のrgbヒストグラムを出力するプログラムを書いてみました。
--------------以下ソース--------------
import sys, pygame import numpy as np import matplotlib.cm as cm import matplotlib.pyplot as plt pygame.init() pygame.display.set_mode((150, 150), 0, 32) buf = pygame.image.load(sys.argv[1]).convert() rect_hist_b = [0.10, 0.03, 0.85, 0.25] rect_hist_g = [0.10, 0.36, 0.85, 0.25] rect_hist_r = [0.10, 0.69, 0.85, 0.25] axHist_b = plt.axes(rect_hist_b) axHist_g = plt.axes(rect_hist_g) axHist_r = plt.axes(rect_hist_r) w, h = buf.get_size() r = np.zeros((w*h,), dtype=np.int) g = np.zeros((w*h,), dtype=np.int) b = np.zeros((w*h,), dtype=np.int) for j in range(h): for i in range(w): #color = (R, G, B, A) color = buf.get_at((i, j)) r[j*w + i] = color[0] g[j*w + i] = color[1] b[j*w + i] = color[2] axHist_r.set_title('red component') axHist_g.set_title('green component') axHist_b.set_title('blue component') axHist_r.hist(r, 256, normed=1, facecolor='red') axHist_g.hist(g, 256, normed=1, facecolor='green') axHist_b.hist(b, 256, normed=1, facecolor='blue') axHist_r.set_xlim(0, 255) axHist_g.set_xlim(0, 255) axHist_b.set_xlim(0, 255) plt.savefig(sys.argv[2],dpi=72)
--------------コマンドプロンプト--------------
$:python hist.py [入力画像] [出力画像]
--------------
プログラムを使うとこんな画像が
こんな感じに出力されます。