Aerobeat本当に楽しいです。
そこで私もusbカメラを使って何か作ってみたくなったのですが、肝心のusbカメラが使いこなせません。
はじめはdirectshowを使うつもりだったのですが、directshow自体がDirectXからPlatformSDKに移ってしまい、またGraphEditがwindowsSDKに移ったりなど、完全に迷子になりました。
一応適当なページで勉強したのですが、設定が違うらしくサンプルコードすら通りません。
何か他のusbカメラを使う方法、またはdirectshowについて詳しく載ってる新しいページを教えてほしいです。
また、AerobeatにはDXライブラリを使ったとあります。できればDXライブラリとusbカメラを同時に使う方法も教えてください。
DXライブラリでUSBカメラの映像を取得する方法
Re: usbカメラの使い方
Webカメラからの画像キャプチャができるライブラリとしては、openCVがありますね。
Aerobeatも確かopenCVを使っていたと思います。
Aerobeatも確かopenCVを使っていたと思います。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: usbカメラの使い方
Aerobeat作者のDixq (管理人)さんではないので細かいことわかりませんが、過去ログによるとAerobeatはDirectShowを使っているらしいです。
「画像認識(色認識)について • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/viewtopic.php?f=3 ... eat#p72849
「画像認識(色認識)について • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/viewtopic.php?f=3 ... eat#p72849
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- Dixq (管理人)
- 管理人
- 記事: 1662
- 登録日時: 15年前
- 住所: 北海道札幌市
- 連絡を取る:
Re: usbカメラの使い方
公開している物はDirectShowを使ってます。
それ以外にも、OpenCV版とKinect版があります。
OpenCVならすごく簡単に取ってこれますよ。
以前DXライブラリの管理人さんが書かれたコードを簡素化した物ですが、よければ参考にして下さい。
OpenCVの設定がなされていたら、コンパイルでき、カメラの映像がそのまま表示されるはずです。
それ以外にも、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 ;
}- Dixq (管理人)
- 管理人
- 記事: 1662
- 登録日時: 15年前
- 住所: 北海道札幌市
- 連絡を取る:
Re: usbカメラの使い方
Aerobeatを作った時は
http://www.google.co.jp/#pq=directshow% ... r_pw.&fp=1
この辺で情報収集して実装しました。まぁCVの方が楽ですね。
※タイトルを過去ログ検索した時、分かり易いように修正させてもらいました。
http://www.google.co.jp/#pq=directshow% ... r_pw.&fp=1
この辺で情報収集して実装しました。まぁCVの方が楽ですね。
※タイトルを過去ログ検索した時、分かり易いように修正させてもらいました。