LoginSignup
11
9

More than 5 years have passed since last update.

【OpenCV】imshow()のウィンドウの「位置固定&サイズが小さい&スケールできない」&ウィンドウが寄ってしまう時の対処法【Python3】

Last updated at Posted at 2018-09-26

事象

VS Code上でOpenCVのimshow()を実行して画像を表示させて確認しようと実行すると、下図のような状況に陥ってしまいました。
【OpenCV】VS Codeで実行したimshowのウィンドウのサイズが小さい時の対処法.png

動作環境

Python 3.7.0
VS Code: August 2018 (version 1.27)
opencv-python: 3.4.3.18

現象

  • ウィンドウの位置が固定されてしまう。
  • ウィンドウサイズが小さい。
  • ウィンドウがスケールできない。
  • キー入力すると表示させたウィンドウが固まる。

解決法

解決法は2Stepです。

まず前提として、imshow()を使用した画像表示のテンプレとして、

img = cv2.imread(IMAGE_PATH)
cv2.imshow('ウィンドウ名', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

このように書くかと思います。
waitKey()を呼ばないと、そもそも画像が表示されませんね?

Step1

まずウィンドウの位置とサイズの件。imshow()で生成されるウィンドウにはデフォルトでcv2.WINDOW_AUTOSIZEというフラグが設定されているそうです。

そこでcv2.namedWindow()というメソッドがあるのですが、これに先ほどのフラグをcv2.WINDOW_NORMALに指定すると、基本的にはサイズが変更可能になり、同時にウィンドウの位置固定も解除され、スケールも可能になります。

使い方

cv2.namedWindow('img', cv2.WINDOW_NORMAL)

Step2

はい、なっていない皆さんはこちらです。
これは画像を2つ以上表示させようとした人のみ起こっている可能性があるのですが、waitKey(0)で待機中にキー入力をすると、このように左に…
ウィンドウ左寄り.png

ウィンドウ左寄り_拡大.png

なにしとんのwwwwwwwwwwwwwwwwwwwww

はい。このように、なにしとんのになります。
これはimshow()を複数箇所で記述しており、その各所でcv2.waitKey(0)を記述している場合に起こります。
その場合、ソースコードの一番最後のcv2.waitKey(0)以外は不要なので削除しましょう。

以上。

11
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
9