ラズパイ専用カメラで画像を撮影する


その1.カメラで撮影して画像ファイルを保存するコード

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# ファイル名: cap.py
import cv2
from datetime import datetime

# /dev/video0を指定
DEV_ID = 0

# パラメータ
WIDTH = 640
HEIGHT = 480

def main():
    # /dev/video0を指定
    cap = cv2.VideoCapture(DEV_ID)

    # 解像度の指定
    cap.set(cv2.CAP_PROP_FRAME_WIDTH, WIDTH)
    cap.set(cv2.CAP_PROP_FRAME_HEIGHT, HEIGHT)

    # キャプチャの実施
    ret, frame = cap.read()
    frame = cv2.rotate( frame, cv2.ROTATE_90_COUNTERCLOCKWISE )
    if ret:
        # ファイル名に日付を指定
        date = datetime.now().strftime("%Y%m%d_%H%M%S")
        path = "./" + date + ".jpg"
        cv2.imwrite(path, frame)

    # 後片付け
    cap.release()
    cv2.destroyAllWindows()
    return


if __name__ == "__main__":
    main()


その2.カメラで動画を撮影して、デスクトップで動画を再生するコード

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# ファイル名: video.py
import cv2

camera = cv2.VideoCapture(0)

while True:
  ret, frame = camera.read()
  if not ret:
    break

  #cv2.imshow("Frame", cv2.flip(frame,180))
  #frame = cv2.rotate(frame, cv2.ROTATE_180)
  cv2.imshow("Frame", cv2.rotate(frame, cv2.ROTATE_90_CLOCKWISE))
  key = cv2.waitKey(1)

  # Escキーを入力されたら画面を閉じる
  if key == 27:
    break

camera.release()
cv2.destroyAllWindows()

 


その3.カメラで撮影した画像で、AI顔認識をした画像を保存するコード

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# ファイル名: capture.py

import cv2

if __name__=="__main__":

    # Haar-like特徴分類器ファイルの読み込み。ファイルの場所は自分の環境に合わせてください。
    face_cascade = cv2.CascadeClassifier('/home/pi/opencv/data/haarcascades/haarcascade_frontalface_default.xml')

    # USBカメラで画像を取得する。
    capture = cv2.VideoCapture(0)
    rtn, frame = capture.read()
    frame = cv2.rotate(frame, cv2.ROTATE_180)
    if( rtn == True ):
        cv2.imwrite( "capture.jpg", frame) #cv2.rotate(frame,cv2.ROTATE_180)

    # 画像ファイルをグレースケールに変換する。
    gray = cv2.cvtColor( frame, cv2.COLOR_BGR2GRAY )
    # 顔を検知する。
    faces = face_cascade.detectMultiScale( gray )
    for rect in faces:
        # 検知した顔を四角で囲む(rect[*]:0=x, 1=y, 2=width, 3=height)。
        color = (0,255,0)    # 緑色(BGR)。
        thickness = 2
        cv2.rectangle( frame, tuple(rect[0:2]), tuple(rect[0:2]+rect[2:4]), color, thickness )
    # 画像ファイルを保存する。
    cv2.imwrite( "capture_output.jpg", frame )

    # 終了処理(ストリームを解放)
    capture.release()
    cv2.destroyAllWindows()

 


OpenCV 関数のヒント

 

■OpenCVで画像を回転する:cv2.rotate()

・書式:cv2.rotate(第一引数, 第二引数)
・第一引数は画像オブジェクトを指定
・第二引数は下記の3種類

 cv2.ROTATE_90_CLOCKWISE: 時計回りに90度
 cv2.ROTATE_90_COUNTERCLOCKWISE: 反時計回りに90度
 cv2.ROTATE_180: 180度

▼サンプルコード

import cv2
img = cv2.imread("sample.png")     # 画像を読み込む。
dst = cv2.rotate(img, cv2.ROTATE_90_COUNTERCLOCKWISE)               # 反時計回りに90° (時計回りに270°) 回転させる。
 

■上下左右に反転:cv2.flip()

・書式:cv2.flip(第一引数, 第二引数)
・第一引数は画像オブジェクトを指定
・第二引数は下記の3種類

 0  :上下反転
 1以上:左右反転
 1以下:上下左右反転

▼サンプルコード
import cv2
img = cv2.imread('data/src/lena.jpg')
print(type(img))
print(img.shape)
img_flip_ud = cv2.flip(img, 0)
cv2.imwrite('data/dst/lena_cv_flip_ud.jpg', img_flip_ud)


コメント欄を読み込み中