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上でアクリルキーホルダーの重心を計算できるツールを作りました!
リンクはこちら↓
アクリルキーホルダーの重心を表示するやつ
