月別アーカイブ: 2011年5月

【OpenCV】USBカメラでキャプチャするサンプル

Mat型を利用した、USBカメラキャプチャサンプル
研究室でのOpenCV勉強会をメモ
(Mat型を使ったサンプルなどは少ない気がする…)

OS、Xcode、OpenCVのバージョンなど
Xcode 3.2.3 64bit
Mac 10.6.7
OpenCV  2.2

 

#include <iostream>
#include "opencv2/opencv.hpp"

using namespace cv;
using namespace std;

int main () {
	VideoCapture cap(0);
	Mat frm;
	while(waitKey(1)!=27){
		cap >> frm;
		imshow("camera",frm);
	}
	return 1;
}

【OpenCV】MacOSにOpenCV 2.2を入れる

MacOSにOpenCVを入れたときのことを思い出しながら記述

MacOSにOpenCVを入れる場合、やり方は二つ
・ソースからビルドしてインストールする方法
・Mac Portsを用いてインストールする方法

圧倒的に後者が楽なので、こちらを採用

まずはMacPortsのパッケージを以下から手に入れてインストール
http://www.macports.org/

インストールが終わったら、MacPortsを更新する
ターミナルから以下のコマンドを入力

sudo port selfupdate

更新が終わったら、OpenCVをインストールする

sudo port install opencv

以上のコマンドの実行が終了したらインストール終了
MacPortsを用いたOpenCVのインストールは簡単ながらかなり時間がかかります
その辺りだけ覚悟する必要があるかも…
(Windowsならインストーラーでサクッっと終わるのに><;)

※ちなみにMacPortsでインストールされたOpenCVは以下の位置にあります
サンプルやドキュメント等 /opt/local/share/opencv/
ライブラリ /opt/local/lib/
ヘッダー /opt/local/include/opencv2/

【OpenCV】PointGrey社のカメラからMat型・IplImage型のデータを得るクラス

PointGrey_MV

研究室ではPointGrey社のカメラを使うことが多いです。
その辺で手に入るWebカメラとは違い、ホワイトバランスの自動調整など行わないので
背景差分などの処理に非常に都合が良いです。

PointGrey社のカメラから、OpenCVで用いるIplImageや、Matを得ようとすると若干メンドクサイです。
なので、ちょっとサボるためにC++用のクラスを作ってみました。
そして、折角作ったので一応公開してみる。

対象は、PointGrey社のカメラを使うんだけど、よくわかんない人、使えればいいやって人です。
カメラは1台のみの使用を想定しています。
本当に適当に作ってあるのでソース汚いです、ごめんなさい。
また多分バグあります、ごめんなさい
それでもよければ使ってみてください。
もちろん、Flycapture SDKはWindowsにしか無いので、Windows専用です
(Mac用のSDK出ないかな…)

Flycap_cppwrap_v0.1.zip
(Windows7 32bit、VisualC++.net2010、OpenCV2.2、PointGrey MVでのみ動作確認)

 

上記のzipを解凍して、中にあるflycap_cppwrap.hとflycap_cppwrap.cppをプロジェクトに追加してください。
なお、PointGreySDKやOpenCVなども使える状態にしておいてください。

Mat型を得るサンプル

#include <iostream>
#include "opencv2¥¥opencv.hpp"
#include "flycap_cppwrap.h"

using namespace cv;
using namespace std;

int main()
{
	Mat frm;

	Flycap cap
	while(waitKey(1)!=27){
		cap.grap(frm);
		imshow(CAMERA_IMAGE,frm);
	}

	return 0;
}

Flaycap型を宣言して、grap関数を呼ぶだけ。引数はカメラの画像を格納したいMat型です。
あとはことMat型、ソースではfrmを好き勝手にOpenCVでいじって下さい。

ちなみにIplImage型を得る場合は以下参照

IplImage型を得るサンプル

#include <iostream>
#include "opencv2¥¥opencv.hpp"
#include "flycap_cppwrap.h"

int main ()
{

	IplImage *frame = 0;
	int c;

	Flycap cap;

	while (1) {
		frame = cap.iplgrap();
		cvShowImage (CAMERA_IMAGE, frame);
		c = cvWaitKey (2);

		if (c == '¥x1b')
			break;
	}

	cvDestroyWindow (CAMERA_IMAGE);

	return 0;
}

同様にFlycap型を宣言して、iplgrap関数を呼び出すだけ。
iplgrap関数の戻り値はIpleImage型です。

一応サンプルとしてmain_mat.cppというファイルに上記のソースが入ってるので
よかったら適当に利用してみてください。