C#でOpenCVSharpを利用してOpenCVを使用しています。
Webカメラ画像を映す処理で生成したウィンドウ内でマウスホイール操作をした際の処理を作ろうと
しているのですが、マウスホイール操作を取得することができません。
C#
1 // デフォルトのカメラをオープン 2 var capture = new VideoCapture(0); 3 if (capture.IsOpened()) 4 { 5 var fs = FrameSource.CreateCameraSource(0); 6 using (var normalWindow = new Window("normal")) 7 { 8 capture.Set(3, 900); // 幅 9 capture.Set(4, 900); // 高さ 10 capture.Set(5, 30); // FPS 11 var normalFrame = new Mat(); 12 13 var grayMat = new Mat(); 14 15 Cv2.SetMouseCallback("normal", On_mouse); 16 while (true) 17 { 18 capture.Read(normalFrame); 19 if (normalFrame.Empty()) 20 { 21 break; 22 } 23 24 normalWindow.ShowImage(img: normalFrame); 25 26 -----略----- 27 28 } 29 } 30 } 31 32 private void On_mouse(MouseEvent @event, int x, int y, MouseEvent flags) 33 { 34 Console.WriteLine($"event: {@event}, (x, y)= ({x}, {y}), flags: {flags}"); 35 if (@event == MouseEvent.MouseWheel) 36 { 37 -----略----- 38 } 39 }
デバッグ文としてコンソール出力にて
マウスホイール操作をした際には
event: FlagRButton, MouseWheel, (x, y)= (***, ***), flags: -7864320
(***はマウス座標)
と来ていることは確認できています。
@eventにMouseWheelが来ているのは分かりますが、FlagRButtonも一緒になっているのがよくわからないところです。
flagsの値も怪しいのですが・・・
この状況でマウスホイール操作時の処理だけを書きたいので、判別を行いたいです。
どのようにすればよいでしょうか。
なお、MouseMoveは下記のように単独で来るため
event: MouseMove, (x, y)= (***, ***), flags: MouseMove
判別して取ることができます。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/24 09:19
2018/05/24 09:23