EWCLIBでとりこんだキャプチャ画像をDXLibで使いたい

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

EWCLIBでとりこんだキャプチャ画像をDXLibで使いたい

#1

投稿記事 by LPluser » 14年前

カメラから取得した画像をつかってゲームをつくろうとおもい、EWCLIB(http://www.geocities.jp/in_subaru/ewclib/index.html)を使っています。

EWCLIBでとりこんだキャプチャ画像をDXLibで使いたいのですが、
http://www.geocities.jp/in_subaru/ewcli ... p.html#e15
http://hpcgi2.nifty.com/natupaji/bbs/pa ... ew&no=1837
を参考にして組んでみたのですが、表示されるがぞうはグレーで、正しく表示されません。(ただしカメラでうつしている物がうごくと画像もかわるので一応よみこんではいると思われる)

コード:

#include "DxLib.h"
#include "ewclib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
						 LPSTR lpCmdLine, int nCmdShow )
{
	// ウインドウモードで起動
	ChangeWindowMode( TRUE ) ;
	//EWCLIB初期化(320*240,30fps)
	EWC_Open(0,320,240,30.0);
	//DxLib初期化処理
	if( DxLib_Init() == -1 ) return -1;
	// 描画先を裏画面にする
	SetDrawScreen( DX_SCREEN_BACK ) ;

	//画像変換用
	int buffer[320*240];
	int GrHandle ;
	BASEIMAGE BaseImage ;

	//画像変換用初期化
	// カラーフォーマットは変化しないので最初に設定
	CreateFullColorData( &BaseImage.ColorData ) ;
	// ミップマップではないので0
	BaseImage.MipMapCount = 0 ;
	// 空のグラフィックハンドルの値を初期化
	GrHandle = -1 ;

	// メインループ
	while( ProcessMessage() == 0 ){

		//画像取得
		EWC_GetImage(0,&buffer);

		//画像変換
		// BASEIMAGE の要素を埋める
		BaseImage.GraphData = buffer;
		BaseImage.Width = 320;
		BaseImage.Height = 240;
		BaseImage.Pitch = 320;

		// グラフィックハンドルを作成しているかどうかで処理を分岐
		if( GrHandle == -1 )
		{
			// 最初の場合はグラフィックハンドルの作成と映像の転送を一度に行う
			GrHandle = CreateGraphFromBaseImage( &BaseImage ) ;
		}
		else
		{
			// 2回目以降はグラフィックハンドルへ映像を転送
			ReCreateGraphFromBaseImage( &BaseImage, GrHandle ) ;
		}

		
		//変換した画像画面に描画
		DrawGraph( 0, 0, GrHandle, FALSE );

		ScreenFlip();
	}

	//終了処理
	DxLib_End() ;
	EWC_Close(0);
	return 0 ;
}
あとコレは余談ですがAeroBeatのように色で物体を認識しようとしたらやはりOpenCVでないと難しいのでしょうか・・・OpenCVは画像関連の専門用語だらけでよくわかりません・・・

LPluser

Re: EWCLIBでとりこんだキャプチャ画像をDXLibで使いたい

#2

投稿記事 by LPluser » 14年前

追記:
環境
VisualC++2008 Express Edition
Intel Core2Duo
使用カメラ:Logicool HD Webcam c525

あとC言語の知識は、中学生のことから3年くらいDxLibをさわって(今高1)多少複雑な2Dゲームをつくっていたレベルです。
(あとWindowsフォームアプリケーションも多少)
他のライブラリのことはあまりわかりません。よろしくおねがいします。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: EWCLIBでとりこんだキャプチャ画像をDXLibで使いたい

#3

投稿記事 by みけCAT » 14年前

関数の仕様がよくわかりませんが、
配列そのもののアドレスを渡すために、
EWC_GetImage(0,&buffer);→EWC_GetImage(0,buffer);
としたらどうでしょうか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

LPluser

Re: EWCLIBでとりこんだキャプチャ画像をDXLibで使いたい

#4

投稿記事 by LPluser » 14年前

EWC_GetImage(0,buffer);
としましたがやはり得られる画像は全体がグレーのよくわからない画像になりました・・・

私が考えたのは、

EWCLIBとOpenCVをつかう例http://www.geocities.jp/in_subaru/ewclib/help/ ... p.html#e15
をみる分には
EWC_SetBuffer(0,imgc->imageData); //カメラ画像格納先の変更
というのがあるのでOpenCVで使われるimageDataのなかにカメラの画像が入っているから、
http://hpcgi2.nifty.com/natupaji/bbs/pa ... ew&no=1837
のとおりに変換してやればいいのかな?と思ったのですが・・・このやり方が根本的に間違っているのでしょうか?

ISLe
記事: 2650
登録日時: 14年前
連絡を取る:

Re: EWCLIBでとりこんだキャプチャ画像をDXLibで使いたい

#5

投稿記事 by ISLe » 14年前

想像で書いてますが。

BaseImage.Pitch = 320;
じゃなくて
BaseImage.Pitch = BaseImage.Width * BaseImage.ColorData.PixelByte;
だったらどうなります?

LPluser

Re: EWCLIBでとりこんだキャプチャ画像をDXLibで使いたい

#6

投稿記事 by LPluser » 14年前

>>ISLe様
BaseImage.Pitch = BaseImage.Width * BaseImage.ColorData.PixelByte;
にしてみたところ、今までよりもまともな画像が読み込めました。
ただモノクロというかモノクロの画像に微妙に赤や青色の線が入ってる画像になり、正しい画像が3回連続したようなものになってしまいます・・

・・・・BaseImage.Pitch・・・こういうのが何を指しているのか理解しないと難しいようですね・・・<(_ _)>

ISLe
記事: 2650
登録日時: 14年前
連絡を取る:

Re: EWCLIBでとりこんだキャプチャ画像をDXLibで使いたい

#7

投稿記事 by ISLe » 14年前

さらに
CreateFullColorData( &BaseImage.ColorData ) ;

CreateXRGB8ColorData( &BaseImage.ColorData ) ;
に変えたら上手く行くような気がします。

これでダメなときはCreateColorDataで細かくフォーマットを指定する必要がありますね。

LPluser

Re: EWCLIBでとりこんだキャプチャ画像をDXLibで使いたい

#8

投稿記事 by LPluser » 14年前

CreateXRGB8ColorData( &BaseImage.ColorData ) ;にしてみたところ無事動きました!!

ありがとうございましたm(。≧Д≦。)m

閉鎖

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