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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
霜焼け

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

#1

投稿記事 by 霜焼け » 14年前

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

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: usbカメラの使い方

#2

投稿記事 by h2so5 » 14年前

Webカメラからの画像キャプチャができるライブラリとしては、openCVがありますね。
Aerobeatも確かopenCVを使っていたと思います。

non
記事: 1097
登録日時: 15年前

Re: usbカメラの使い方

#3

投稿記事 by non » 14年前

h2so5 さんが書きました:Aerobeatも確かopenCVを使っていたと思います。
OpenCVは使ってないと聞いた記憶がありますが・・・・
non

霜焼け

Re: usbカメラの使い方

#4

投稿記事 by 霜焼け » 14年前

OpenCVですか。使ったことないけど頑張ってみます。
Aerobeatは何を使っているのか教えてください。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: usbカメラの使い方

#5

投稿記事 by softya(ソフト屋) » 14年前

Aerobeat作者のDixq (管理人)さんではないので細かいことわかりませんが、過去ログによるとAerobeatはDirectShowを使っているらしいです。

「画像認識(色認識)について • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/viewtopic.php?f=3 ... eat#p72849
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 15年前
住所: 北海道札幌市
連絡を取る:

Re: usbカメラの使い方

#6

投稿記事 by Dixq (管理人) » 14年前

公開している物は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 ;
}

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 15年前
住所: 北海道札幌市
連絡を取る:

Re: usbカメラの使い方

#7

投稿記事 by Dixq (管理人) » 14年前

Aerobeatを作った時は
http://www.google.co.jp/#pq=directshow% ... r_pw.&fp=1
この辺で情報収集して実装しました。まぁCVの方が楽ですね。

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

霜焼け

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

#8

投稿記事 by 霜焼け » 14年前

ありがとうございます。
まずはOpenCVでプリクラみたいなものを作ってみます。

閉鎖

“C言語何でも質問掲示板” へ戻る