内容
タイトル通りです. opencv-pythonでマウスイベントを取得していたところ, 右クリックのイベント取得をしようとするとdefaultの機能でmenuが開かれてしまいました.
調べた所なにもしないでも上手くいっている方もいるのでopencvのバージョンが原因かもしれません.
- 環境
Ubuntu 18.04 LTS
opencvはpipでinstall(多分これが原因) - 日時
2019/11/20
解決法
opencv 2.2 documentation » ユーザインタフェース
stackoverflow/Why does a right click open a drop down menu in my OpenCV imshow() window?
によると, 右クリックでmenuが開くのはどうやらこのQtバックエンドによる機能のようです.
なので, この機能をなくすか他のバックエンドにする必要があるみたいです.
バックエンド云々はよくわからないのと, この機能は必要ないのでこの機能をなくします.
[先の公式documentから]
- flags ウィンドウのフラグ.現在サポートされるフラグは以下のとおりです:
- CV_WINDOW_NORMAL or CV_WINDOW_AUTOSIZE: CV_WINDOW_NORMAL を指定すると,ユーザがウィンドウサイズを変更できるようになります.逆に CV_WINDOW_AUTOSIZE を指定すると,表示画像( ShowImage を参照してください)にフィットする様にウィンドウサイズが自動的に調整され,ユーザはウィンドウサイズを変更することができなくなります.
- CV_WINDOW_FREERATIO or CV_WINDOW_KEEPRATIO: CV_WINDOW_FREERATIO を指定すると,アスペクト比を保たずに画像サイズが調整され,逆に CV_WINDOW_KEEPRATIO を指定すると,アスペクト比を保つように調整されます.
- CV_GUI_NORMAL or CV_GUI_EXPANDED: CV_GUI_NORMAL を指定すると,ステータスバーとツールバーのない以前のウィンドウを表示することができます.逆に CV_GUI_EXPANDED を指定すると,機能強化された新しいGUIが表示されます.
どうやら, cv2.namedWindow
の引数のflagsを指定すればできるようですね.
cv2.namedWindow("hoge", CV_GUI_NORMAL)
cv2.namedWindow("hoge", cv2.CV_GUI_NORMAL)
cv2.namedWindow("hoge", cv.CV_GUI_NORMAL)
どれもだめでした!!!
なんでだろう...
stackoverflow/NameError: global name 'CV_GUI_NORMAL' is not definedにこのような具体的な値が書いてあり, ...
WINDOW_AUTOSIZE = 1
WINDOW_FREERATIO = 256
WINDOW_FULLSCREEN = 1
WINDOW_GUI_EXPANDED = 0
WINDOW_GUI_NORMAL = 16
WINDOW_KEEPRATIO = 0
WINDOW_NORMAL = 0
WINDOW_OPENGL = 4096
WND_PROP_ASPECT_RATIO = 2
WND_PROP_AUTOSIZE = 1
WND_PROP_FULLSCREEN = 0
WND_PROP_OPENGL = 3
WND_PROP_VISIBLE = 4
WINDOW_GUI_NORMAL = 16
なので, ...
cv2.namedWindow("hoge", 16)
上手くいきました!!!
上記の数値はHigh-level GUIに詳しく書いてありますね.