ラズパイ専用カメラで画像を撮影する
その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)