Webカメラの動作確認をする

MeanShiftを使って、カメラが物体を追いかけることを実現する準備として、カメラの動作確認をします。
カメラはLogicool C525です。

Raspberry Piとカメラを接続する

カメラのUSBをRaspberry Piに接続します。

プログラムで実現することを決める

C525は、最大で1280 x 720の解像度ですが、ここまで大きい必要は無いので640 x 480で取得します。
取得した画像を1枚ファイルに保存します。その後、キーボードで’q’が押されるまでWebカメラは動作し続けます。
‘q’を押すとき、OpenCVのウィンドウを選択している必要があります。

プログラムを設計する

短く簡単なプログラムなので、設計は必要ありません。

プログラムを実装する

ソースコードを掲載します。

test_camera.py

# -*- coding: utf-8 -*-
#! /usr/bin/python
#! /usr/bin/env python

# [USAGE]
#
# python open_cv_test_camera.py

# ------------------------------------------------------------------------------

## OpenCV 3.2
import cv2 as open_cv
## Time
import time

# ------------------------------------------------------------------------------

WIDTH = 640
HEIGHT = 480

# ------------------------------------------------------------------------------

## create instance

video_capture = open_cv.VideoCapture(0)

if video_capture.isOpened():
    print('video capture: 0')
else:
    video_capture = open_cv.VideoCapture(1)
    if video_capture.isOpened():
        print('video capture: 1')
    else:
        print('can not get video capture')
        quit()

# ------------------------------------------------------------------------------

## Width

## set property
## Logicool C525 : 0 - 1280

video_capture.set(open_cv.CAP_PROP_FRAME_WIDTH, WIDTH)

# ------------------------------------------------------------------------------

## Hight

## set property
## Logicool C525 : 0 - 720

video_capture.set(open_cv.CAP_PROP_FRAME_HEIGHT, HEIGHT)

# ------------------------------------------------------------------------------

## get a frame

ret, frame = video_capture.read()
open_cv.imwrite("000_frame.png", frame)

if frame is None:
    print("ERROR")

# ------------------------------------------------------------------------------

while True:
    ## input q -> quit
    k = open_cv.waitKey(1)
    if k == ord('q'):
        break

    ## get a frame
    ret, frame = video_capture.read()

    if ret == True:
        open_cv.imshow('SHOW IMAGE', frame)
        time.sleep(0.1)
    else:
        break

video_capture.release()
open_cv.destroyAllWindows()

動作確認する

綺麗さ、速さ、の両方について想像以上に良い映像が得られるかと思います。

ときどき、open_cv.VideoCapture(0)とopen_cv.VideoCapture(1)の両方に失敗します。そのときは、スクリプトの実行を繰り返してください。





«       »