PythonとOpenCVを使って画像・動画を表示する

アイキャッチ画像 OpenCV
スポンサーリンク

みなさん、お疲れ様です。

今回はPythonとOpenCVを使って画像と動画を表示する方法をご紹介します。

 

準備:OpenCVのインストール

pip install opencv-python

まずは上記のコードをコンソールで実行して、OpenCVをインストールしましょう。

環境によっては、OpenCVのインストールは時間がかかるかもしれません。

インストールが終わったら、pythonを起動して、バージョン確認もしてみましょう。

import cv2
cv2.__version__

このコードでエラーが出た場合は、OpenCVを再度インストールしましょう。

 

OpenCVで画像を読み込む

import cv2
import os

os.chdir('/Users/〇〇〇〇/Desktop/')#ディレクトリはMacバージョン
filename = "pig.jpg"
img = cv2.imread(filename)

OpenCVでファイルを読み込む前に、一応画像や動画があるディレクトリに移動しておきます。

それはosでディレクトリを移動することができます。

cv2.imread(“ファイル名”, 引数2※)  引数2は以下参照
※1:cv2.IMREAD_COLOR : カラー画像として読み込む.画像の透明度は無視される.デフォルト値

※2:cv2.IMREAD_GRAYSCALE : グレースケール画像として読み込む

※3:cv2.IMREAD_UNCHANGED : アルファチャンネルも含めた画像として読み込む

※4:上記は1,0,−1で指定することができる

OpenCVで画像情報を取得する

#画像のサイズを取得する
hight, width, chanel = img.shape[:3]
print("画像の大きさ: ", img.shape)
print("画像の高さ: ",hight)
print("画像の幅; ",width)
print("画像のデータ型: ", type(img.shape))
print("channel数: ", chanel)
print("画像の構成を確認\n", img)

#画素数の表示
pixels = hight * width

次に画像のサイズを取得していきます。

img.shapeは画像の高さと幅、チャンネル数を取得することができます。

ここでいうチャンネル数は、RGBだったら赤と緑と青の色情報が3種類あるので3,

グレースケールは色情報は色情報はモノクロの1種類ですので、1となります。

画像サイズは(画像の高さ, 画像の幅, 色情報)で格納されている

OpenCVで動画を読み込む

#動画のファイルを読み込む
movename = "/Users/〇〇〇〇/Desktop/動画ファイル名.mp4"
cap = cv2.VideoCapture(movename)

動画ファイルを読み込む方法は、VideoCapture関数で読み込みます。

第一引数にファイル名を読み込みます。

動画を読み込む:cv2.VideoCapture(“動画ファイル名”※)

※第一引数に0を入力すると、WEBカメラから動画の取得ができます。

 

OpenCVは動画情報を読み取る

ret, frame =  cap.read()
#動画ファイルの情報を取得する
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)

hight = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)

total_frame = cap.get(cv2.CAP_PROP_FRAME_COUNT)

fps = cap.get(cv2.CAP_PROP_FPS)

print("動画の幅: ", width)
print("動画の高さ: ", hight)
print("総フレーム数: ", total_frame)
print("fps: ", fps)
print("動画の長さ: ", total_frame/fps, "[sec]")

動画のフレームや高さと幅などのプロパティを取得するには、get()関数を使用します。

cap.get(引数1)関数の引数1の説明は以下に示した通りです。

動画の幅:cv2.CAP_PROP_FRAME_WIDTH

動画の高さ:cv2.CAP_PROP_FRAME_HEIGHT

動画のフレーム:cv2.CAP_PROP_FRAME_COUNT

動画の総フレーム:cv2.CAP_PROP_FPS

OpenCVでWEBカメラから動画情報を取得する

#webカメラで動画をとるとき
cap = cv2.VideoCapture(0)
video_width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)#データ型はfloat型
video_hight = cap.get(cv2.CAP_PROP_FRAME_HIGHT)

while True:
    #VideoCaptureから1フレームを取得する
    ret, frame = cap.read()
   #VideoCaptureから取得した1フレームを表示
    cv2.imshow("vidoframe", frame)
    
   #キーボード入力を1ms待つ
    k = cv2.waitKey(10)
    if k == 27:#キーボードからESC(27)が入力されたら終了
        break
    
cap.release()
cv2.destroyAllwindows()

webカメラをPCに接続した状態で、cv2.VideoCapture(引数1)の引数1を0に指定すると、webカメラからの情報の取得が開始されます。

ここで注意したいのは、webカメラからの情報はこちらから処理を中止するコードを挿入しないと、永遠と記録され続けます。

そのため、基本的にcv2.waitKey()関数でキーボード入力を受け付けます。

cv2.waitKey(引数1):キーボードからの入力を受け付ける

※引数1:入力待ち時間(ミリ秒単位)0の場合は無制限にキーボードの入力を待ち続けます。

 

cv2.VideoCapture( ).release( ):デバイスを解放する
cv2.destroyAllwindows( ):特定のウィンドウを閉じる

まとめ

今回はOpenCVとPythonを使って、動画と画像の読み込みをやってみました。

OpenCVを使ってたくさん画像処理・動画処理しましょう!

では!

コメント

タイトルとURLをコピーしました