[matplotlib] 77. クリックイベントで画像上のクリックした場所のRGB値を取得する

ipywidgets

はじめに

matplotlibで表示した画像上でクリックした位置のRGBデータを取得する方法について説明する。応用例として、クリックで取得したRGB値を背景色に適用する方法についても説明する。

コード

コードをダウンロード(.pyファイル)コードをダウンロード(.ipynbファイル)

解説 画像のRGB値をクリックで取得

モジュールのインポートなど

%matplotlib widgetでjupyter lab上でインタラクティブな図を表示する。

%matplotlib widgetをつかうにはipymplをインストールする必要がある。詳細については以下で解説した。

[ipywidgets] 19. Jupyter labでipywidgetsを動かす
jupyter labでipywidgetsを使おうとして、冒頭に%matplotlib notebookと入れても動作しません。 ここでは、jupyter labでipywidgetsを使う方法について説明します。

バージョン

データの作成

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]))のようにすることでできる。

画像中のサボテンをクリックすると以下のようになる。

画像中の鉢をクリックすると以下のようになる。

画像中の土をクリックすると以下のようになる。

参考

Event handling and picking — Matplotlib 3.3.1 documentation

コメント