ページ 11

DXライブラリでUSBカメラの映像を取得する方法

Posted: 2011年8月17日(水) 14:41
by 霜焼け
Aerobeat本当に楽しいです。
そこで私もusbカメラを使って何か作ってみたくなったのですが、肝心のusbカメラが使いこなせません。
はじめはdirectshowを使うつもりだったのですが、directshow自体がDirectXからPlatformSDKに移ってしまい、またGraphEditがwindowsSDKに移ったりなど、完全に迷子になりました。
一応適当なページで勉強したのですが、設定が違うらしくサンプルコードすら通りません。
何か他のusbカメラを使う方法、またはdirectshowについて詳しく載ってる新しいページを教えてほしいです。
また、AerobeatにはDXライブラリを使ったとあります。できればDXライブラリとusbカメラを同時に使う方法も教えてください。

Re: usbカメラの使い方

Posted: 2011年8月17日(水) 17:20
by h2so5
Webカメラからの画像キャプチャができるライブラリとしては、openCVがありますね。
Aerobeatも確かopenCVを使っていたと思います。

Re: usbカメラの使い方

Posted: 2011年8月17日(水) 17:26
by non
h2so5 さんが書きました:Aerobeatも確かopenCVを使っていたと思います。
OpenCVは使ってないと聞いた記憶がありますが・・・・

Re: usbカメラの使い方

Posted: 2011年8月18日(木) 13:36
by 霜焼け
OpenCVですか。使ったことないけど頑張ってみます。
Aerobeatは何を使っているのか教えてください。

Re: usbカメラの使い方

Posted: 2011年8月18日(木) 14:02
by softya(ソフト屋)
Aerobeat作者のDixq (管理人)さんではないので細かいことわかりませんが、過去ログによるとAerobeatはDirectShowを使っているらしいです。

「画像認識(色認識)について • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/viewtopic.php?f=3 ... eat#p72849

Re: usbカメラの使い方

Posted: 2011年8月18日(木) 18:37
by Dixq (管理人)
公開している物はDirectShowを使ってます。
それ以外にも、OpenCV版とKinect版があります。
OpenCVならすごく簡単に取ってこれますよ。

以前DXライブラリの管理人さんが書かれたコードを簡素化した物ですが、よければ参考にして下さい。
OpenCVの設定がなされていたら、コンパイルでき、カメラの映像がそのまま表示されるはずです。

コード:

#include <cv.h>
#include <highgui.h>
#include <DxLib.h>

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
	CvCapture *capture ;
	IplImage *image ;
	int GrHandle = -1;
	BASEIMAGE BaseImage ;

	ChangeWindowMode( TRUE ) ;// ウインドウモードで起動
	DxLib_Init();
	SetDrawScreen( DX_SCREEN_BACK ) ;

	capture = cvCreateCameraCapture( 0 ) ;// カメラからのビデオキャプチャを初期化する
	CreateFullColorData( &BaseImage.ColorData ) ;// カラーフォーマットは変化しないので最初に設定
	BaseImage.MipMapCount = 0 ;// ミップマップではないので0
	while(!ScreenFlip()&&!ProcessMessage()){
		image = cvQueryFrame( capture ) ;		// フレームを取得
		// BASEIMAGE の要素を埋める
		BaseImage.GraphData = image->imageData ;
		BaseImage.Width = image->width ;
		BaseImage.Height = image->height ;
		BaseImage.Pitch = image->widthStep ;
		// グラフィックハンドルを作成しているかどうかで処理を分岐
		if( GrHandle == -1 ){// 最初の場合はグラフィックハンドルの作成と映像の転送を一度に行う
			GrHandle = CreateGraphFromBaseImage( &BaseImage ) ;
		} else {// 2回目以降はグラフィックハンドルへ映像を転送
			ReCreateGraphFromBaseImage( &BaseImage, GrHandle ) ;
		}
		DrawGraph( 0, 0, GrHandle, FALSE ) ;
	}
	cvReleaseCapture( &capture ) ;// ビデオキャプチャの後始末
	DxLib_End();
	return 0 ;
}

Re: usbカメラの使い方

Posted: 2011年8月18日(木) 18:39
by Dixq (管理人)
Aerobeatを作った時は
http://www.google.co.jp/#pq=directshow% ... r_pw.&fp=1
この辺で情報収集して実装しました。まぁCVの方が楽ですね。

※タイトルを過去ログ検索した時、分かり易いように修正させてもらいました。

Re: DXライブラリでUSBカメラの映像を取得する方法

Posted: 2011年8月18日(木) 19:43
by 霜焼け
ありがとうございます。
まずはOpenCVでプリクラみたいなものを作ってみます。