web-dev-qa-db-ja.com

Python-OpenCV-imread-画像の表示

現在、画像の読み取りとウィンドウへの表示に取り組んでいます。これは成功しましたが、画像を表示すると、ウィンドウでは画像全体の一部しか見ることができません。画像を読み込んだ後に保存しようとしましたが、画像全体が保存されました。だから、私はそれが画像全体を読んでいることをかなり確信しています。

imgFile = cv.imread('1.jpg')

cv.imshow('dst_rt', imgFile)
cv.waitKey(0)
cv.destroyAllWindows()

画像: image

スクリーンショット: screenshot

28
Sinjin Forde

画像が大きすぎて、ウィンドウが画面に収まらないようです。 cv2.WINDOW_NORMALフラグを使用してウィンドウを作成すると、スケーラブルになります。次に、次のように画面に合わせてサイズを変更できます。

from __future__ import division
import cv2


img = cv2.imread('1.jpg')

screen_res = 1280, 720
scale_width = screen_res[0] / img.shape[1]
scale_height = screen_res[1] / img.shape[0]
scale = min(scale_width, scale_height)
window_width = int(img.shape[1] * scale)
window_height = int(img.shape[0] * scale)

cv2.namedWindow('dst_rt', cv2.WINDOW_NORMAL)
cv2.resizeWindow('dst_rt', window_width, window_height)

cv2.imshow('dst_rt', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

OpenCVのドキュメントによればCV_WINDOW_KEEPRATIOフラグは同じことを行う必要がありますが、そうではなく、pythonモジュールで提示されていない値です。

33
Igonato

これはあなたを助けることができます

namedWindow( "Display window", CV_WINDOW_AUTOSIZE );// Create a window for display.
imshow( "Display window", image );                   // Show our image inside it.
3

OpenCVでは、オーバーサイズの画像やディスプレイの解像度よりも大きい画像を表示しようとすると、トリミングされたディスプレイが表示されます。これはデフォルトの動作です。
選択したウィンドウで画像を表示するには、openCVは名前付きウィンドウを使用することをお勧めします。 namedWindow documentation を参照してください

関数namedWindowは、画像とトラックバーのプレースホルダーとして使用できるウィンドウを作成します。作成されたウィンドウは、名前で参照されます。

cv.namedWindow(name, flags=CV_WINDOW_AUTOSIZE)ここで、各ウィンドウはargという名前の画像コンテナに関連しています。必ず同じ名前を使用してください

例えば:

import cv2
frame = cv2.imread('1.jpg')
cv2.namedWindow("Display 1")
cv2.resizeWindow("Display 1", 300, 300)
cv2.imshow("Display 1", frame)
1
Mahesh