Webカメラというか、USBビデオクラス(UVC)を使用するUSBカメラを表示するためのサンプル。USBカメラを表示したかったが録画する機能とかもいらないしサクッと作ってみた。
OpenCvSharpで読み込んでC#のフォームに表示してもいいが、今回は手っ取り早くOCvで表示まで行った。
ソースコードはオブジェクト指向とは思えないような感じになってる。がまぁ動作してるので。。。
文字列入力を読み込みたかったので、スレッドでQueue<string>にConsole.ReadLineを読み込んでいる。一般的には「CvのWindowで何かキーを押せば終了」だと思うが、このコードはConsoleにquitを入力することで終了する。Console.ReadLineは同期読み込みだから、途中で読み込みを止めたいと思っても止められない(はず)。ということで最後にユーザーがEnterを入力してやる必要がある。Inのストリームを引っ張ってきて自前で処理すればいいかもしれないが、今回は面倒だったのでやってない。
解像度は「適切な(縦横比の)解像度で縦横を連続して設定すると適用される」みたいな動作になってるのでハードコードしてやった。
リアルタイムで映像を表示するだけの機能しかないが、画角の確認だとかフォーカスの確認くらいなら可能。
2015年9月3日木曜日
2014年8月5日火曜日
WinにOpenCV環境を作る
1) OpenCVのダウンロード
プロジェクトサイト http://sourceforge.net/projects/opencvlibrary/ からEXEファイルをダウンロードEXEを起動すると展開先のパスを聞かれるので適当な場所を指定する
ちなみに2014/08/05時点でバージョンは2.4.9だった
2) OpenCVの移動
OpenCVを適当な場所に移動する今回はC:\直下にした
こんな感じになってる
3) PATHの設定
OSの環境変数にバイナリのパスを通す今回の例では"C:\opencv\build\x86\vc10\bin"
4) プロジェクトの作成
VisualC++を起動してプロジェクトを作成する種類はWin32コンソールにする
5) プロジェクトの設定
プロパティマネージャでMicrosoft.Cpp.Win32.userをダブルクリックするプロパティページというダイアログで共通プロパティ->VC++ディレクトリを選択
インクルードディレクトリにopencv\build\includeのパスを
ライブラリディレクトリにopencv\build\x86\cv10\libのパスをそれぞれ設定する
あとはてきとーにソースコードを書いていけばいいらしい
VisualC++のディレクトリ配置が結構面倒なので、あんまり簡単にはいかない
Ubuntuのほうが簡単な気がする
でもUbuntuは使い慣れてないのと、アプリの関係で移行する気にはならない
Ubuntu入ったノートPCとか欲しいかも でもどーせ買うならSurfacePro3のほうが楽しそう…
2014年1月12日日曜日
OpenCV
最近 実践OpenCV 2.4―映像処理&解析
(AA) という本を買いました
ちょっとOpenCVでやってみたいことがあったためです
現状、僕が使えるOpenCV環境はMacのParallersに入っているUbuntu12か、RasPiに入っているRaspbianのどちらかになります
Nexus7にもUbuntuが入っていますが、ARM版のOpenCVはちょっとややこしそうなのでまだ入れていません
また、OpenCVはWindowsやMacOSにも入れることができますが、コレもちょっと面倒っぽいのでやってません
Windowsはともかく、いずれはMacOSも必要になりそうですが、とりあえずUbuntuで遊んでいる次第です
この本はVisualC++の環境を前提としているため、ソースコードも微妙に不慣れな感じです
ただ大きな違いはないため、ほぼ同じコードをUbuntuでビルドすることができます
付録にはOpenCVをソースコードからビルドする方法も書いてあるため、とりあえず色々つかえそうです
ちょっとOpenCVでやってみたいことがあったためです
現状、僕が使えるOpenCV環境はMacのParallersに入っているUbuntu12か、RasPiに入っているRaspbianのどちらかになります
Nexus7にもUbuntuが入っていますが、ARM版のOpenCVはちょっとややこしそうなのでまだ入れていません
また、OpenCVはWindowsやMacOSにも入れることができますが、コレもちょっと面倒っぽいのでやってません
Windowsはともかく、いずれはMacOSも必要になりそうですが、とりあえずUbuntuで遊んでいる次第です
この本はVisualC++の環境を前提としているため、ソースコードも微妙に不慣れな感じです
ただ大きな違いはないため、ほぼ同じコードをUbuntuでビルドすることができます
付録にはOpenCVをソースコードからビルドする方法も書いてあるため、とりあえず色々つかえそうです
2013年12月28日土曜日
RasPi+OpenCV+WebCamera
Raspberry PiにUSBカメラを接続してOpenCVで撮影してみました
とりあえずこんな感じになっています
流れとしては
10行目)カメラを探す
12行目)ポインタアドレスを表示(デバッグ用 0位外であれば正常という判断)
14行目)ヌルポインタ(カメラが見つからない)以外であれば処理
15-16行目)デフォルトの画面解像度を獲得
20行目)画像をキャプチャ
21行目)画像を保存
23行目)保存した画像をsystem関数を使いscpで画面の有るマシンに転送
25-26行目)構造体を解放
だと思います(てきとーにそれらしい関数を引っ張ってきてるだけなので微妙
僕の環境はRasPiに画面が無いので、scpで他のマシンに飛ばしていますが
RasPiに画面が接続されているなら23行目及び4行目は削除しても問題ありません
コンパイルは
$ gcc hoge.c `pkg-config --cflags --libs opencv`
で通ります
めちゃくちゃ時間かかりますが。。
当初はRasPi用カメラモジュールを使おうかと思って、可視光のモジュールも購入済みですが
raspistillが地味に面倒なのでOpenCVを使ってしまいました
あとOpenCVだといろいろ参考になりそうな情報が多い というのも理由です
今のところカメラモジュールを使って何かをつくろうというネタは2個ほどありますが、優先度はかなり低いので気分転換に進める 程度になりそうです
その前にOpenCV本も1冊買っておかないと(ネット情報だと頭にはいらない性格)(本を買っても読まない性格だけど)
いろいろやりたいことはありますが、優先度が低かったり、恐ろしく面倒だったり、高コストだったり、それらのフルコンボだったりでいまいちやる気が出てこない今日このごろです
2013年12月12日木曜日
OpenCVでキャプチャ
基本的なコードは前回のエントリ参照
画像を獲得するには
IplImage *img = cvQueryFrame(capture);
で画像のポインタを受け取る
保存するには
cvSaveImage("img.png", img, 0);
とする
Webのサンプルを見るとcvSaveImageの引数は2個なんだけど
これはC++で使う前提で、Cだと最後まで引数を指定する必要がある
ファイルのフォーマットはファイル名の拡張子で識別される
bmpとかpngとか、たいていは対応してそう
ノイズとか解像度はカメラによって異なるので、綺麗な画像が欲しければちゃんとしたカメラを探したりとかする必要がある
あとカメラによって解像度が違う とかの可能性もあるので、ちゃんと動くプログラムを作るならその辺りも作りこむ必要がある
(それが嫌でRasPi用のカメラを買ってみたりしたのだけど)
一旦IplImageになってしまえば顔検出とか色々できるので、煮るなり焼くなり好きにできる
画像を獲得するには
IplImage *img = cvQueryFrame(capture);
で画像のポインタを受け取る
保存するには
cvSaveImage("img.png", img, 0);
とする
Webのサンプルを見るとcvSaveImageの引数は2個なんだけど
これはC++で使う前提で、Cだと最後まで引数を指定する必要がある
ファイルのフォーマットはファイル名の拡張子で識別される
bmpとかpngとか、たいていは対応してそう
ノイズとか解像度はカメラによって異なるので、綺麗な画像が欲しければちゃんとしたカメラを探したりとかする必要がある
あとカメラによって解像度が違う とかの可能性もあるので、ちゃんと動くプログラムを作るならその辺りも作りこむ必要がある
(それが嫌でRasPi用のカメラを買ってみたりしたのだけど)
一旦IplImageになってしまえば顔検出とか色々できるので、煮るなり焼くなり好きにできる
登録:
投稿 (Atom)


