Python で画像処理してアクリルキーホルダーの重心を調べるのがあまりにも簡単で衝撃を受けたのでメモ。
$ python3
以下のコードを入力。
from PIL import Image import numpy as np from scipy import ndimage # PNG画像の読み込み im = np.array(Image.open('keychain.png')) # 画像からアルファ値のみを取り出す im2 = im[:, :, 3] # アルファ値がない場合で、輝度値を用いる場合は以下を実行 # im2 = (im[:, :, 0].astype(float) + im[:, :, 1] + im[:, :, 2]) / 3.0 # 重心を計算 (y, x) = ndimage.measurements.center_of_mass(im2) print("y = {0}, x = {1}".format(y, x))
このプログラムを実行すると、重心が出力される。試しに重心の位置に赤点を描いてみたのが以下の画像です。合ってるかな?
参考にした記事
scipy.ndimage.measurements.center_of_mass
Python, NumPyで画像処理(読み込み、演算、保存) | note.nkmk.me
NumPyでRGB画像の色チャンネルを分離して単色化、白黒化、色交換 | note.nkmk.me
追記
重心を画像に表示して保存する。
im[int(y), :, (0, 1, 2)] = 0 im[int(y), :, 3] = 255 im[:, int(x), (0, 1, 2)] = 0 im[:, int(x), 3] = 255 Image.fromarray(im).save("keychain_center.png")
追記2
Web上でアクリルキーホルダーの重心を計算できるツールを作りました!
リンクはこちら↓
アクリルキーホルダーの重心を表示するやつ