質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

1053閲覧

画像に対するカーソル処理?

退会済みユーザー

退会済みユーザー

総合スコア0

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/04/17 01:03

編集2021/04/20 04:40

pythonで、ある画像を読み込み、その画像を表示して、
カーソルでその画像の特定範囲を指定し、その縦横幅とかを変数に入れたり返す等する方法は、
あるんでしょうか?どのようにするんでしょうか?

Matplotlibを使いたいです、最近よく使うし、構造が分かりやすいため。
opencvは構造が分かりにくい、、複雑でブラックボックス化しているため、避けたい。

Matplotlibで画像を表示し、あとCanvasとかも使うんですかね??範囲指定には。

guiというものはよく分かりませんが、cvのように、中身が複雑すぎてブラックボックス化しているものは使わず、中の仕組みが分かりやすいものを使っていきたいのです。

matplotlibで、マウス位置とクリック情報が取得できそうです。
https://qiita.com/HajimeKawahara/items/abc24fa2216009523656

との事で、matplotで画像を表示させた後クリック情報を取得する事ができればできるみたいです、
どうやるのかよく分かりませんが・・・。

イメージ説明

この画像に対し、赤色の、左上にある四角形のサイズを取得する・・・ことは、問題なくできますかね?
以下のコードを提示頂いたのですが、まだ試していません。

python

1from PIL import Image 2import matplotlib.pyplot as plt 3import numpy as np 4 5im=Image.open('tmp.jpg') 6 7global start_x; 8global start_y; 9 10 11def onclick(event): 12 global start_x; 13 global start_y; 14 print('click' , event.x, event.y) 15 start_x = int(event.x) 16 start_y = int(event.y) 17 18 19def onrelease(event): 20 global start_x; 21 global start_y; 22 print('release' , event.x, event.y ) 23 print('size x=' , event.x - start_x , 'y=' , start_y -event.y ) 24 25 26fig = plt.figure() 27 28im_list=np.asarray(im) 29plt.imshow(im_list) 30 31fig.canvas.mpl_connect('button_press_event', onclick) 32fig.canvas.mpl_connect('button_release_event', onrelease) 33 34plt.show()

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2021/04/17 01:39

> その画像を表示して 表示する方法は何ですか?
退会済みユーザー

退会済みユーザー

2021/04/17 02:30

読み込んだjpgファイルですね。
meg_

2021/04/17 06:14

> 読み込んだjpgファイルですね。 ?対象ではなく「方法」ついて尋ねています。
退会済みユーザー

退会済みユーザー

2021/04/17 06:55

おそらくマイナス査定をされた方の気持ちは「https://www.omoshiro-suugaku.com/entry/mouse-position みたいな記事を読んでますか?(調べて分からないなら手伝えるけど)」だと思います。 検討ください。
退会済みユーザー

退会済みユーザー

2021/04/17 19:52

Matplotlibを使いたいです、最近よく使うし、構造が分かりやすいため。 opencvは構造が分かりにくい、、複雑でブラックボックス化しているため、避けたい。 Matplotlibで画像を表示し、あとCanvasとかも使うんですかね??範囲指定には。
meg_

2021/04/18 00:57

追加の情報は質問に追記してください。GUIをご自身で実装するつもりですか?
guest

回答1

0

マウスをクリックのイベント
・button_press_event
・button_release_event
のハンドラーを定義して、あとは、JPEG表示しておけばよさそうですー。

調べたら、少し情報があったので提示しますー。

pythonで、マウスの位置が取得できるようです。
https://qiita.com/deaikei/items/7f1acaa3b1db40c33f1a

https://qiita.com/HajimeKawahara/items/abc24fa2216009523656

Opencvで画像が表示できるようです。
https://qiita.com/Kazuhito/items/b2ebd9f9010f1ffcac5b

[ipywidgets] 18. 画像上でクリックした点の座標をTextareaに表示
https://sabopy.com/py/ipywidgets-18/

これからを組み合わせれば、できそうな気がしましたー。

以下、組み合わせた結果になりますー。

python3

1from PIL import Image 2import matplotlib.pyplot as plt 3import numpy as np 4 5im=Image.open('tmp.jpg') 6 7global start_x; 8global start_y; 9 10 11def onclick(event): 12 global start_x; 13 global start_y; 14 print('click' , event.x, event.y) 15 start_x = int(event.x) 16 start_y = int(event.y) 17 18 19def onrelease(event): 20 global start_x; 21 global start_y; 22 print('release' , event.x, event.y ) 23 print('size x=' , event.x - start_x , 'y=' , start_y -event.y ) 24 25 26fig = plt.figure() 27 28im_list=np.asarray(im) 29plt.imshow(im_list) 30 31fig.canvas.mpl_connect('button_press_event', onclick) 32fig.canvas.mpl_connect('button_release_event', onrelease) 33 34plt.show() 35

投稿2021/04/17 08:53

編集2021/04/19 13:34
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/04/17 20:00

cv使わずに、また範囲指定でサイズ取得はどうするのでしょうか・・・ 秒ごとのカーソル位置の取得は上の記事でできてるみたいですが・・・
退会済みユーザー

退会済みユーザー

2021/04/18 01:47

> cv使わずに OpenCVであれば、まがいなりにもcv2.imshow("タイトル",イメージ)の後にcv2.imshow(0)とするだけでGUIが作れる上に、OpenCVに組み込まれている関数でマウス位置=画像の寸法も取れるので「やりたいことは大体5-6行で達成できる」のがOpenCVが楽で便利な点だと思います。 これを避ける――例えばGUI(QTやwxPython等)を使うことになると、ウインドウの定義、描画の定義、イベントの定義、ロード画面の用意等めんどくさいことがどんどん増えていきます。コード量も膨らみます。 やりたいことが大きいのは良いと思いますが、いばらの道を進みたいと示される割に調べる労力を惜しんでいるような気がしてなりません。
退会済みユーザー

退会済みユーザー

2021/04/18 03:36

matplotlibで、マウス位置とクリック情報が取得できそうです。 https://qiita.com/HajimeKawahara/items/abc24fa2216009523656 サイズは、左クリックを開始したx、y座標と、左クリックをはなしたx、y座標で求めれる気がしますー。
退会済みユーザー

退会済みユーザー

2021/04/18 14:16

matplotは、画像表示もできるので、 画像表示した状態で、クリック情報取得すれば、画像内のある画像の大きさを取得できますね。 全然慣れてないので、どうするのかは分からない部分があるのですが・・・。
退会済みユーザー

退会済みユーザー

2021/04/18 14:21

https://qiita.com/HajimeKawahara/items/abc24fa2216009523656 いろいろやり方はあると思いますが、↑のqiitaの記事にあるonclick()の関数で、考えると、最初に、クリックされた時に、xとyの座標を保存して、次にクリックがはなされた時に、xとyの値を保存して、2つの保存した値から、大きさを計算できると思いますー。
退会済みユーザー

退会済みユーザー

2021/04/18 14:38

自分がこれをざっと読んで思ったのは、これは画像を取り込んでいないようなのですが、 実際は画像を取り込んで、その上で、クリック情報を取得する必要があり、 画像の取り込みとクリック情報の取得というものを、どのようにさせて融合させるのかなという点が疑問です。
退会済みユーザー

退会済みユーザー

2021/04/19 13:35

↑一番上の回答欄に、サンプルのプログラムを載せました。参考にしてみてくださいー。
退会済みユーザー

退会済みユーザー

2021/04/20 04:40

ありがとうございます、例の画像ではできますかね?
退会済みユーザー

退会済みユーザー

2021/04/20 05:35

できると思うよー。画像をtmp.jpgという名前にして、コードと、同じディレクションに置いて、python実行してみると良いと思いますー。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問