事象
VS Code上でOpenCVのimshow()を実行して画像を表示させて確認しようと実行すると、下図のような状況に陥ってしまいました。
動作環境
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)で待機中にキー入力をすると、このように左に…

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