はじめに
matplotlibで表示した画像上でクリックした位置のRGBデータを取得する方法について説明する。応用例として、クリックで取得したRGB値を背景色に適用する方法についても説明する。
コード
解説 画像のRGB値をクリックで取得
モジュールのインポートなど
%matplotlib widgetでjupyter lab上でインタラクティブな図を表示する。
%matplotlib widgetをつかうにはipymplをインストールする必要がある。詳細については以下で解説した。
バージョン
データの作成
np.random.rand(5,5,3) * 255で0から255の要素をもち、形状が(5,5,3)のRGB画像形式のデータを作成する。整数にする必要があるので、np.rint()で四捨五入し、astype(int)で整数型に変換している。
図とOutputの表示
図はimshowで表示する。
ipywidgetsのOutputをprint文を表示させるために設定しておく。clear_output=Trueで常に新しいもののみが表示される。
onclickイベントの設定
event.xdata, event.ydataでクリックした点の座標を取得する。
その値をnp.rintで四捨五入して、intで囲むことで整数型にする。
rgb値はimg[py,px]で得ることができる。
ax.plot(px,py,’wo’)でクリックした座標に白丸を表示する。
ax.set_title()で得たRGB値を表示する。printによりipywidgetsのOutputにも表示する。
onclickイベントの有効化
fig.canvas.mpl_connect(‘button_press_event’, onclick)でイベントを有効化する。
画像中央のピンクをクリックすると以下のようになる。
緑の部分をクリックすると以下のようになる。
解説 画像のクリックした点の色を背景色にする
画像の読み込み
下記サイトから画像を取得し、plt.imreadで読み込む。
画像の表示
.set_major_locator(ticker.NullLocator())で画像が表示される図の目盛りをなしとした。
onclickイベントの設定
onclickイベントはさきほどのものとほぼ同じとなっている。画像がPNGなので透明度のデータもあるため、RGBAをタイトルに表示する。背景色の設定はfig.set_facecolor((rgba[0],rgba[1],rgba[2],rgba[3]))のようにすることでできる。
画像中のサボテンをクリックすると以下のようになる。
画像中の鉢をクリックすると以下のようになる。
画像中の土をクリックすると以下のようになる。
コードをダウンロード(.pyファイル) コードをダウンロード(.ipynbファイル)
コメント
サイトが重すぎるので改善願いたい
ご指摘ありがとうございます。改善方法を検討します。