Python / PIL / 画像の読み込み、サイズの取得、RGB値の取得、輝度の計算、ヒストグラムの表示

from PIL import Image

import matplotlib.pyplot as plt
import numpy             as np

class IMAGE:
    def __init__(self, imgPath):
        self.srcImg        = Image.open(imgPath)                                  # 画像を読み込む。
        self.numOfPixels   = self.srcImg.width * self.srcImg.height               # 全画素数を取得する。
        self.AllRGB        = np.asarray(self.srcImg).reshape(self.numOfPixels, 3) # 各画素のRGB値を画像の左上からZ字順に並べ替える。
        self.AllBrightness = np.mean(self.AllRGB, axis=1, dtype="uint16")         # 各画素の輝度(ここではRGBの平均値とする)を取得する。
        
    def showImg(self):
        plt.imshow(self.srcImg)
        plt.show()
        return self
        
    def showHist(self):
        plt.figure()
        plt.xlabel("val")
        plt.ylabel("freq")
        plt.hist(self.AllBrightness, range=(-0.5, 255.5), bins=256)
        plt.show()
        return self
        
########
# test #
########
if __name__ == "__main__":
    IMAGE("H:\\img\\yuri.png").showImg().showHist()
    IMAGE("H:\\img\\mono.png").showImg().showHist()

実行結果:
f:id:ti-nspire:20180803054534p:plain:w300

Lua、Python / 排列を逆順に並べ換える

Luaの場合:

function table.reverse(tbl)
    local len  = #tbl
    local temp = {}
    for i = len, 1, -1 do
        temp[#temp+1] = tbl[i]
    end
    return temp
end

-- test --
do

local lst = {"a", "b", "c", "d"}
local rev = table.reverse(lst)
print(table.concat(rev, ", "))

end

実行結果:
f:id:ti-nspire:20180731070909p:plain

―――――――――――――――――――――――――――――――――――
Pythonの場合:
理窟はわからないがスライスでいける。

lst = ["a", "b", "c", "d"]
lst[::-1]

実行結果:
f:id:ti-nspire:20180731161858p:plain
―――――――――――――――――――――――――――――――――――
2018年10月1日、理窟がわかった。
lst[:]にするとリスト全体([0]から1周して[0]まで)がスライスされる。
lst[::-1]にするとリストの全部の要素が-1個飛びで(要するに末尾から1個ずつさかのぼって)抽出されて新たなリストが作られる。