ETE 開発日誌

仕事や趣味で開発したロボットや、製作状況をレポートします。

OPENCV

opencvでネットワークカメラ

opencvでネットワークカメラからの画像を取り込むことが出来るみたい。
知らんかった。けどこれでいろいろ遊べるな。

無線USB(WEB)カメラ FS-WC500BK その後

さっそくプレステワイヤレスコントローラーのラジコンにカメラを載せて操縦してみました。
だがしかし、プレステ側の通信が不調になります。カメラの電源OFF→コントローラー復活!!。っということは混信です。同じ2.4GHz帯なのはわかっていましたが、ここまで使えないとは。無線LANもbluetoothもだめなのか?今さら赤外線リモコンはどうかと思うし。ロボでサバゲのサイトでもちゃんと書いてました「非推奨」。
画像をPCで処理してその結果でロボットを動かす予定だったのに通信手段がない。

無線USB(WEB)カメラ FS-WC500BK

camera_test1
camera_test2
帰宅すると佐川急便から電話、着払いの荷物らしい。すっかり忘れていましが、ヤフオクで購入した無線USB(WEB)カメラ FS-WC500BK でした。さっそくOPENCVで動作確認。繋いでからわかったことですが、電波の強さと内蔵バッテリーの残量も表示されます。エフェクトも設定できます。使い道としてはロボットに載せるとか、ライントレースカーのセンサーとして使うとかいろいろ考えられます。またジャンク箱行きにならないようにちゃんと使い道を考えます。

久々のOPENCV

デジタルフォトフレームは壊れたままです。
っで気分転換に久しぶりにOPENCVで遊んでみる。
半年前にも書いた気もしますがまたverが上がっていました。
7月4日にver2.3が公開されています。しかしこのverはインストーラーが付いてないので手動でpathの設定等を自分で行う必要があります。
とりあえずUSBカメラの映像を表示させようと思い、ver2.3のサンプルを見ると見慣れないコードが並んでます。実はver2.0から全く新しいC++インタフェースが導入されていたようです。

画像を取り込んで表示するには今までは

int main (int argc, char *argv[])
{
CvCapture *capture = cvCaptureFromCAM(0);
iplImage *frame = 0;
cvSetCaptureProperty (capture, CV_CAP_PROP_FRAME_WIDTH, 640);
cvSetCaptureProperty (capture, CV_CAP_PROP_FRAME_HEIGHT, 480);
cvNamedWindow ("Capture", CV_WINDOW_AUTOSIZE);

while (1)
 {
 frame = cvQueryFrame (capture);
 cvShowImage ("Capture", frame);
 if (cvWaitKey (1) >=0)break;
 }

cvReleaseCapture (&capture);
cvDestroyWindow ("Capture");

return 0;
}

となり、
新しいインターフェースでは以下のようになります。

int main(int argc, char *argv[])
{
cv::VideoCapture cap(0);
cap.set(CV_CAP_PROP_FRAME_WIDTH, 640);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 480);
cv::namedWindow("CAPTURE", CV_WINDOW_AUTOSIZE|CV_WINDOW_FREERATIO);
cv::Mat frame;

while(1) {
       cap >> frame; //キャプチャ
       cv::imshow("CAPTURE", frame); // 表示
if(cv::waitKey(1) >= 0) break;//キー入力待ち
}
return 0;
}

メモリの開放やwindowの開放をわざわざ記述しなくていいようです。

今までの記述の方法でもコンパイルはできます。

あとver1.0の時からキャプチャの解像度の変更が出来なかったのですが、自分の環境ではver2.2でも変更ができません。ver2.3では変更できています。
とりあえずカメラの映像は表示できたので顔認識のプログラムも作ってみました。コード自体は短いのですが、ちゃんとコンパイルを通すための環境設定のほうに時間がかかってしまいました。

ノートPCでの動作確認がうまくいったので、先日作ったデスクトップでも動作確認を行いました。
32bitのコードでも動作するのですが、せっかくwindows7、64bitなのでvisual studio 2010 expressにwindows7 sdkをインストールし、64bitコードをコンパイルできるように設定します。opencvの中には64bit用のdllとlibが含まれています。

そろそろ遊んでないで何か1つでも完成させたいものです。

OPENCVのフルスクリーン表示

opencv2


OPENCV1.0の時にはOPENCV単体でフルスクリーン表示ができなかったのですが、2.1から?命令が追加されて出来るようになったようです。
ただ、周りのふちは残るようです。
写真は640×480でカメラから取り込んだものを1400×1050の画面にフルスクリーン表示し画面キャプチャしたものです。
フレームレートが10まで下がってしまいました。
Pentium-M1.7GHzじゃ無理なようです。

cvNamedWindow("Capture",0);//Captureというwindowを作る
cvSetWindowProperty("Capture",CV_WND_PROP_FULLSCREEN,CV_WINDOW_FULLSCREEN);
//Captureというwindowをフルスクリーンに設定

windowを作る際にautosizeの指定をしないで、WindowPropertyでフルスクリーンに設定します。
Archives
最新コメント
訪問者数
  • 今日:
  • 昨日:
  • 累計:

  • ライブドアブログ