Pythonで画像の座標を取得する方法を現役エンジニアが解説【初心者向け】

初心者向けにPythonで画像の座標を取得する方法について現役エンジニアが解説しています。PythonでOpenCVを使って画像のRGB値の範囲を取得したり、マウスクリックした場所の座標や位置を取得する方法を説明します。OpenCVのインストール方法や使い方について確認しましょう。

TechAcademyマガジンは受講者数No.1のオンラインプログラミングスクールTechAcademy [テックアカデミー]が運営。初心者向けに解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。

Pythonで画像の座標を取得する方法について、TechAcademyのメンター(現役エンジニア)が実際のコードを使用して初心者向けに解説します。

そもそもPythonについてよく分からないという方は、Pythonとは何なのか解説した記事を読むとさらに理解が深まります。

 

なお本記事は、TechAcademyのオンラインブートキャンプPython講座の内容をもとに紹介しています。

 

田島悠介

今回は、Pythonに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

Pythonで画像の座標を取得する方法について詳しく説明していくね!

大石ゆかり

お願いします!

 

目次

 

OpenCVで指定した範囲のRGB値を取得する方法

OpenCVで読み込んだ画像で範囲を指定するためには、指定したい範囲をX座標、Y座標で指定することで絞り込めます。

croped_img = img[y_from:y_to, x_from:x_to]

指定した範囲のRGB値の平均を取得するには、各値をflattenで一次元化し、meanで平均をとっています。

b_val = croped_img.T[0].flatten().mean()
g_val = croped_img.T[1].flatten().mean()
r_val = croped_img.T[2].flatten().mean()

 

[PR] Pythonで挫折しない学習方法を動画で公開中

OpenCVでマウスクリックした場所の座標を取得する方法

OpenCVで表示したウィンドウ(imshow)上でマウスのクリックした場所の座標を取得するにはマウスクリックしたときにコールバック関数を呼び出す必要があります。

マウスクリックで実行する関数を定義するためには、cv2.setMouseCallbackを使います。

第一引数には画像をマウス操作の処理を実行するウィンドウ名、第二引数にはマウス操作が行われたときに実行するコールバック関数を指定します。

なお、第一引数で指定したウィンドウ名とimshowで設定したウィンドウ名が一致しないとコールバック関数は実行されません。

cv2.setMouseCallback('img', onMouse)

コールバック関数を呼び出されたときにクリックした場所の座標を取得します。

コールバック関数の引数でコールバックイベントの種類、イベント発生時のx座標、y座標を取得できます。ちなみにコールバックイベントではクリック以外にもホイール操作、ダブルクリックのイベントも取得できます。

例えば、マウスを左クリックしたときの座標を表示するなら以下のコールバック関数になります。

def onMouse(event, x, y, flags, params):
    if event == cv2.EVENT_LBUTTONDOWN:
        print(x, y)

 

実際に書いてみよう

以上の内容を踏まえてマウスをクリックした場所のRGB値を取得するサンプルコードを書いてみます。

以下のサンプルコードを任意のディレクトリに保存します。

import cv2

img = cv2.imread('img.png', cv2.IMREAD_COLOR)
window_name = 'img'

def onMouse(event, x, y, flags, params):
    if event == cv2.EVENT_LBUTTONDOWN:
        crop_img = img[[y], [x]]
        b_val = crop_img.T[0].flatten().mean()
        g_val = crop_img.T[1].flatten().mean()
        r_val = crop_img.T[2].flatten().mean()
        print("R: {}, G: {}, B: {}".format(r_val, g_val, b_val))

cv2.imshow(window_name, img)
cv2.setMouseCallback(window_name, onMouse)
cv2.waitKey(0)

サンプルコードを保存した先と同じディレクトリに画像を保存します。画像のファイル名はサンプルコード上ではimg.pngとしていますが、お使いになる画像にあわせて変えてください。

サンプルコードを実行すると保存した画像が別ウィンドウで表示されるので、画像上のどこかをクリックするとクリックした場所のRGB値が表示されます。
 

まとめ

今回はOpenCVでマウスをクリックしたときの座標の取得方法とRGB値の取得方法について紹介しました。

OpenCVは画像処理に特化したライブラリですが、独自でGUI操作をするためのメソッドも用意されているため、手作業で画像処理を行うときに今回紹介した手法が応用できると思います。OpenCVの可能性を感じていただけると幸いです!
 

監修してくれたメンター

メンター三浦

モバイルゲームを運用している会社のエンジニアをしています。趣味でWEB開発やクラウドコンピューティングもやっており、ソフトもハードもなんでもやります。

TechAcademyジュニアではPythonロボティクスコースを担当しています。好きな言語はPython, Node.js。

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

 

TechAcademyでは、初心者でもPythonを使った人工知能(AI)や機械学習の基礎を習得できるオンラインブートキャンプPython講座を開催しています。

挫折しない学習方法を知れる説明動画や、現役エンジニアとのビデオ通話とチャットサポート、学習用カリキュラムを体験できる無料体験も実施しているので、ぜひ参加してみてください。