Python

OpenCV 接続したカメラから動画を取得しよう (Python)

投稿者 : OSCA

概要

 本稿では OpenCV ライブラリを利用して、コンピュータに接続された(内蔵された)カメラから動画を取得する方法について解説します。

VideoCapture クラス

 まずは本稿を読み進めるのに重要な VideoCapture クラスについて説明します。 VideoCapture クラスは、カメラもしくは動画ファイルから画像データを取得することを責務とするクラスです。 VideoCapture クラスにはいくつものメソッドがありますが、本稿で利用するメソッドは次のものです。

メソッド名 説明
read() 1コマ分のキャプチャ画像データを読み込みます。
release() 動画ファイル閉じる、もしくはキャプチャデバイスを終了させます。

カメラから動画を取得して表示するサンプル

 それではさっそく、カメラから動画を取得して表示するプログラムを書いてみましょう。 プログラムは以下のようになります。

import cv2

# VideoCapture オブジェクトを取得します
capture = cv2.VideoCapture(0)

while(True):
    ret, frame = capture.read()
    cv2.imshow('frame',frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

capture.release()
cv2.destroyAllWindows()

 まずは cv2.VideoCapture() で VideoCapture オブジェクトを取得します。 引数にはコンピュータに接続されているカメラの番号を指定しています。 コンピュータにカメラが1台だけしか接続されていない場合には「0」を指定します。 もし複数のカメラが接続されている場合は「1」などの番号を指定します。

 カメラから連続的に画像を取得するため、ここでは while 文で繰り返し処理を行います。 while 内の最初で、カメラから1コマのデータを取得するため capture.read() を呼び出しています。 取得した1コマの画像データは、変数 frame に代入されています。

 OpenCV には、OSのフレーム(ウィンドウ)に画像を表示してくれる cv2.imshow() メソッドがあります。 第一引数は開くフレームの名前を文字列で指定します、特にどんな名前でも良いでしょう。 そして第二引数には、capture.read() で取得した画像データを指定します。 cv2.imshow() メソッドを呼び出すと、自動的にフレーム(ウィンドウ)が立ち上がって画像を表示してくれることでしょう。

 上のサンプルソースコードの while 内では、ループを止めるために「q」キーがタイプされたら break するための if 文を記述しています。(開かれたウィンドウにフォーカスがある状態で「q」キーをタイプします。) どのように while を抜けるかは、皆さんが好きなように決定してください。

 while を抜けると、処理を終了させるために VideoCapture を終了して、開いたウィンドウも終了させます。

おわりに

 本稿では OpenCV を利用して、コンピュータに接続したカメラから動画を取得する方法について解説しました。

 

著者 : OSCA

OSCA

Java, PHP 系のWEBエンジニア。 WEBエンジニア向けコミュニティ「WEBエンジニア勉強会」を主催。
個人として何か一つでも世の中の多くの人に使ってもらえるものを作ろうと日々奮闘中。
@engineer_osca