03-3258-1238
03-3258-1238平日9:00 ~ 18:00(土日祝日除く)
カメラから取得した画像をディスプレイに表示する方法を2つご紹介します。
1画像処理ライブラリOpenCVの”imshow()"コマンドを使用する方法
OpenCVの”read()”コマンドでカメラから取得した画像をリアルタイムに動画としてディスプレイに出力したい場合に簡単に実行が可能。
2グラフ描画ライブラリMatplotlibの”imshow()”コマンドを使用する方法
行列データのプロットを得意としているMatplotlibは、豊富なオプションを使用して1枚の画像情報を色々な形で出力する場合に適しています。
本記事では、それぞれの出力方法について、使い方や注意点を解説していきます。
※出力の前に、カメラからの画像取得が必要です。 カメラからの画像取得に関してはこちらを参照ください。 →カメラから画像を取得するコマンド
画面への画像の出力は、以下の1行のコマンドで実現が可能です。
cv2.imshow(‘camera', frame)
このコマンドにおける第1引数の’camera’は出力するWindowのタイトル名です。自由に設定してください。 そして、第2引数の’frame’が主力する画像データが格納されている変数名です。 例えばOpenCVのread()コマンドで、以下のようにカメラから画像を取得した場合は、"frame”が画像データの変数名になります。
ret, frame = cap.read()
cv2.imshowを異なるWindow名で実行してください。
cv2.imshow('WindowName1', frame1) cv2.imshow('WindowName2', frame2)
同じWindow名の場合は、前の画像に変えて新しい画像が上書き表示されます。
Windowを閉じるコマンドには、cv2.destroyWindow()とcv2.destroyAllWindow()があります。
1つのWindowを閉じる場合には、cv2.destroyWindowを使用します。()内に閉じるWindowの名前を挿入してください。
cv2.destroyWindows('WindowName')
全てのWindowを閉じる場合には、cv2.destroyAllWindowsを使用します。 例えば、プログラムの終了前にWindowを全て閉じるために使われます。
cv2.destroyAllWindows()
ここまでの内容を踏まえて、カメラから取得した画像をリアルタイム表示するサンプルプログラムを紹介します。
import cv2 #カメラの設定 デバイスIDは0 cap = cv2.VideoCapture(0) #繰り返しのためのwhile文 while True: #カメラからの画像取得 ret, frame = cap.read() #カメラの画像の出力 cv2.imshow('camera' , frame) #繰り返し分から抜けるためのif文 key =cv2.waitKey(10) if key == 27: break #メモリを解放して終了するためのコマンド cap.release() cv2.destroyAllWindows()
Matplotlibの場合は、以下の2行のコマンドで画像を出力します。
matplotlib.pyplot.imshow(frame) matplotlib.pyplot.show()
1行目の"imshow()"コマンドで出力する画像データの変数やオプションを指定し、2行目の"show()"コマンドでWindowへの出力が行われます。
Matplotlibライブラリを使用するには、ライブラリをインストールした上でインポートする必要があります。
まず、インストールは、コマンドプロンプトやターミナル上で以下のコマンドを実行してください。
pip install matplotlib
次にインポートですが、プログラムの冒頭にimportコマンドで、matplotlib.pyplotを指定します。
import matplotlib.pyplot
この時、以下のように設定することにより、ライブラリを使用する際にmatplotlib.pyplot.imshowというコマンドをplt.imshowと省略することが可能になります。
import matplotlib.pyplot as plt
これは、 as 以降に書かれた "plt"がインポートしたライブラリの省略名として認識されるためです。
OpenCVライブラリのread()やimshow()コマンドは、赤(R)、緑(G)、青(B)の情報をBRGの順番で扱います。 一方、Matplotlibでは、RGBの順番で扱うため、OpenCVのread()コマンドで入力した画像を出力する際には、色の順番を変更する必要があります。 BRG からRGBへの変更には、OpenCVのcv2.cvtColorが便利です。Matplotlibのimshow()で画像を表示する前に以下のコマンドを実行してください。
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
上記コマンドは、frameという変数に格納された画像情報を取得し、RGBの順番を変更したのちにその情報をframeに上書きするという内容です。
上下の十字ボタンでは、マウス操作での表示画像の移動が、虫眼鏡ボタンでは、マウス操作で画像の拡大(左クリック)・縮小(右クリック)が可能です。 また、スライドバーボタンでConfiguretion toolを開くと、スライドバーでグラフの表示位置を変更できます。
画像の保存ボタンでは、表示している画像をjpegやpngなどの形式で保存することが可能です。
表示されている画像にマウスカーソルを合わせると、右下に座標とその座標のRGBのそれぞれの値が表示されます。
OpenCVの場合は、imshow()の第1引数がWindowの名前でしたが、Matplotlibの場合は、imshow()でWindowの名前を設定することはできません。 Windowの名前を変更するには、あらかじめ、plt.figure()で設定する必要があります
fig = plt.figure("WindowName")
Matplotlibのimshowは第2引数以降にオプションを指定することで、様々なことが可能です。 例えば、cmap=”gray”とaspect=2のオプションを指定する場合には、以下のように記述してください。
plt.imshow(frame, cmap=”gray”, aspect=2)
オプションの種類と内容に関して、Matplotlibの公式ページに書かれている内容を一覧にまとめて紹介します。
ここまでの内容を踏まえて、カメラから取得した画像を出力するサンプルプログラムを紹介します。
import cv2 import matplotlib.pyplot as plt #カメラの設定 デバイスIDは0 cap = cv2.VideoCapture(0) #カメラからの画像取得 ret, frame = cap.read() #取得した画像をBGRからRGBに変換 frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) #カメラの画像の出力 plt.imshow(frame) plt.show() cv2.waitKey() #メモリを解放して終了するためのコマンド cap.release() cv2.destroyAllWindows()
この時、plt.imshow(frame)にオプションを付加することで、様々な表示が可能です。
カメラで取得した画像をリアルタイムに動画として出力するコマンドとしてOpenCVのimshow()コマンドを、カメラで取得した画像を1枚の画像として出力する際に様々なオプションが選択できるMatplotlibのimshow()をご紹介しました。
プログラムの内容に応じて使い分けていただければと思います。
v4l2でカメラパラメータを確認
初めてのPythonガイド
初めてのOpenCVガイド
カメラの設定の確認・変更
カメラの設定Windowを簡単に出す
フレームレートの設定・確認方法
USBケーブルの延長方法
ハイスピードカメラとは
USBカメラの「ゲイン」設定
産業用カメラの選び方
KLV大学マシンビジョンコース