Python : カメラの撮影

PythonOpencvを使ったカメラの撮影方法です。

これはスマホのカメラのように、カメラの画像を見ながら撮影する方法です。

 

まずはopencvを使うため、opencvのインポートをします。

import cv2

 

その後、カメラやカメラサイズを決めます。

カメラのNoの設定、1つしかカメラがない場合は0
cap_no = 0
cap_0 = cv2.VideoCapture(cap_no,cv2.CAP_DSHOW)

カメラのサイズを640 x 480ピクセルに設定
cap_0.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cap_0.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)

 

カメラを移すというプロセスは

カメラの画像を取り込む→画像を表示する→次のカメラの画像を取り込む

→前の画像を上書きして表示する。

ということを繰り返すプログラムになるため、

 

手っ取り早くwhile文でカメラがtrue(正常につながっている状態)ならば

動き続けるようにします。
while(cap_0.isOpened()):

これで、cap_0という名前に設定したカメラの画像を読み込みます。

ret1, frame1 = cap_0.read()


何もしないのもつまらないので、画像にフレーム数でも書き込みます。
cv2.putText(frame1,str(j),(20,50), fontType, 2, (0, 0, 0), 2, cv2.LINE_AA)

フレーム数は1ずつ増えるので、1足していきます
j = j + 1
画像を表示します。
cv2.imshow('frame1',frame1)

ここまでだと止まらないプログラムになってしまうため、

止められるようにキー入力で止められるようにします。
キー入力を待つqを押したら、画像表示の中止
key = cv2.waitKey(1)
ここが終了
if key & 0x00FF == ord('q'):
break


これは次いでですが、画像の保存
elif key & 0x00FF == ord('s'):
cv2.imwrite('frame00.jpg',frame1)

 

最後にwhile文を抜けたとに、カメラを閉じるのと、表示したフレームを閉じます。

#カメラをリリース
cap_0.release()
#画像をすべて閉じる
cv2.destroyAllWindows()

 

下記がプログラムの詳細です。

 

import cv2

#カメラのNoの設定、1つしかカメラがない場合は0
cap_no = 0
cap_0 = cv2.VideoCapture(cap_no,cv2.CAP_DSHOW)
#カメラのサイズを640 x 480ピクセルに設定
cap_0.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cap_0.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)

#とりあえず画面横にフレーム数を表記
j = 0
#フレーム数を表記する文字のフォント
fontType = cv2.FONT_HERSHEY_COMPLEX

#while文にてカメラがつながっている限りは動画撮影
while(cap_0.isOpened()):
    #カメラを読み込む
    ret1, frame1 = cap_0.read()
    #画像にフレーム数を書き込む
    cv2.putText(frame1,str(j),(20,50), fontType, 2, (0, 0, 0), 2, cv2.LINE_AA)
    #フレーム数の計算
    j = j + 1
    #画像を表示
    cv2.imshow('frame1',frame1)
    
    #キー入力を待つqを押したら、画像表示の中止
    key = cv2.waitKey(1)
    #終了
    if key & 0x00FF  == ord('q'):
        break
    #画像の保存
    elif key & 0x00FF  == ord('s'):
        cv2.imwrite('frame00.jpg',frame1)
#カメラをリリース
cap_0.release()
#画像をすべて閉じる
cv2.destroyAllWindows()

今までにpythonについて書いた記事はここにリンクを貼ってあります。

興味があればぜひご覧ください。