2016年1月20日水曜日

PythonでWebカメラの画像を保存する[Python]

 Pythonで画像処理の勉強をちょっとやってみたいと思い,とりあえずWebカメラから画像を取得してみた。

1.OpenCVのインストール


 OpenCVの公式サイトのダウンロードページからOSに合ったバージョンをダウンロードしてインストールする。opencvフォルダ内のbuild\python\2.7\x86\cv2.pydをPython27フォルダ内のLib\site-packagesにコピーすれば大丈夫なはず。

2.プログラム

 俺が書いたみたいに見せてるけれどOpenCVの公式ドキュメントをちょこっと変えただけでなんか申し訳ない。sを押すとphoto.jpgという名前で保存される。qを押すと終了する。

# -*- coding: utf-8 -*-
import numpy as np
import cv2

cap = cv2.VideoCapture(0)

while(True):
    # フレームをキャプチャする
    ret, frame = cap.read()

    # 画面に表示する
    cv2.imshow('frame',frame)

    # キーボード入力待ち
    key = cv2.waitKey(1) & 0xFF

    # qが押された場合は終了する
    if key == ord('q'):
        break
    # sが押された場合は保存する
    if key == ord('s'):
        path = "photo.jpg"
        cv2.imwrite(path,frame)

# キャプチャの後始末と,ウィンドウをすべて消す
cap.release()
cv2.destroyAllWindows()


 左はArduinoの箱。特に意味は無いです。右は画面を撮影したらこうなった。写し鏡みたいな。こちらも特に意味は無いです。

 ちなみにcv2.Cannyという関数を使うとエッジ検出ができます。ラズパイでは難しいかもしれないですが,普通のパソコンならリアルタイムで処理できるはずです。

# -*- coding: utf-8 -*-
import numpy as np
import cv2

cap = cv2.VideoCapture(0)

while(True):
 # フレームをキャプチャする
 ret, frame = cap.read()

 # エッジ検出
 frame = cv2.Canny(frame,100,200)

 # 画面に表示する
 cv2.imshow('frame',frame)

 # キーボード入力待ち
 key = cv2.waitKey(1) & 0xFF

 # qが押された場合は終了する
 if key == ord('q'):
  break
 # sが押された場合は保存する
 if key == ord('s'):
  path = "photo.jpg"
  cv2.imwrite(path,frame)

# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()


 こちらエッジがされた画像。緑茶の二文字が見て取れる。画像処理と言っても既存の関数を使うだけで中身を知らなくてもできるという現実が嬉しいような悲しいような……。

3 件のコメント:

  1. どこに保存するんですか?実行しましたが、保存した写真を見つけられなかったです。

    返信削除
  2. 実行しているpythonの作業ディレクトリに保存されます
    pythonの作業ディレクトリの確認方法はこの辺を見ればわかるかと思います
    https://qiita.com/Oz-Spade/items/7fa479fae7a0ea6fcddf

    pathの部分を絶対パスに変更すれば好きな場所に保存できます
    path = "photo.jpg"
    の部分を,windowsなら
    path = "C:\\photo.jpg"
    のようにすればCドライブ直下に保存されます

    返信削除
  3. r"C:\Users\rmlab_minh\Desktop\photo.jpg"
    と書いたらできました。ありがとうございます。

    返信削除