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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

Q&A

1回答

1840閲覧

C/C++ マウスイベント取得されない

MEK

総合スコア0

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

0グッド

0クリップ

投稿2021/07/20 04:44

前提・実現したいこと

左クリックで画像上のx,yを取得したい.

発生している問題・エラーメッセージ

imshowで画像は表示されるが,画像上で左クリックしてもターミナルに座標が表示されない.

該当のソースコード

Cpp

1#include <opencv2/opencv.hpp> 2#include <iostream> 3#include "opencv2/highgui/highgui.hpp" 4using namespace std; 5using namespace cv; 6 7void mouse_callback(int event, int x, int y, int flag, void *userdata) 8{ 9 if (event == EVENT_LBUTTONDOWN) { 10 cout << x << " , " << y << endl; 11 } 12} 13 14int main() 15{ 16 Mat img = imread("C:/Users/sample.png"); 17 const String winname = "test"; 18 imshow(winname, img); 19 setMouseCallback(winname, mouse_callback); 20 waitKey(); 21 22 return 0; 23}

試したこと

画像サイズを調整してみた→効果なし
空の画像を表示させてみた→座標取得できた.

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

episteme

2021/07/20 05:31

waitKey() してるから、とかじゃなくて?
MEK

2021/07/20 05:53

waitKey()しないと速攻でWindowが閉じます.waitKey(100000)みたいに待機時間長くしても変わらず,マウスイベントが取得できません.
guest

回答1

0

C++

1#include <opencv2/opencv.hpp> 2#include <iostream> 3 4void mouse_callback(int event, int x, int y, int flag, void* userdata) { 5 if (event == cv::EVENT_LBUTTONDOWN) { 6 std::cout << x << " , " << y << std::endl; 7 } 8} 9 10int main() { 11 12 cv::Mat src = cv::imread("C:/Users/sample.png"); 13 14 cv::namedWindow("test"); 15 cv::setMouseCallback("test", mouse_callback); 16 while ( true ) { 17 cv::imshow("test", src); 18 if ( cv::waitKey(5) > 0 ) break; 19 } 20 cv::destroyAllWindows(); 21 22 return 0; 23}

投稿2021/07/20 06:05

episteme

総合スコア16614

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

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

MEK

2021/07/20 06:56

グレーの"test"ウィンドウも同時に表示されました.そちらのほうではマウスイベントを取得できますが,imreadした画像の"test"ウィンドウでは取得できません.
episteme

2021/07/20 07:45

cv::namedWindow("test"); を cv::imshow("test", src); に取り替えたらどうなります?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問