• 締切済み

プログラミングできる方にお聞きします!!  二つのプログラムの結合を教えてください!!

今現在プログラム作成中ですが自分で作ったプログラムとOpenCVがどのように結合させたらいいか解りません!! 例えば #include "cv.h" #include "highgui.h" #ifdef _EiC #define WIN32 #endif static CvMemStorage* storage = 0; static CvHaarClassifierCascade* cascade = 0; void detect_and_draw( IplImage* image ); const char* cascade_name = "haarcascade_frontalface_default.xml"; /* "haarcascade_profileface.xml";*/ int main( int argc, char** argv ) { CvCapture* capture = 0; IplImage *frame, *frame_copy = 0; int optlen = strlen("--cascade="); const char* input_name; if( argc > 1 && strncmp( argv[1], "--cascade=", optlen ) == 0 ) { cascade_name = argv[1] + optlen; input_name = argc > 2 ? argv[2] : 0; } else { cascade_name = "../data/haarcascades/haarcascade_frontalface_alt2.xml"; input_name = argc > 1 ? argv[1] : 0; } cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 ); ////////////省略///////////////////////////////////////////// ///////////////////////////////////////////////////////////// cvReleaseImage( &frame_copy ); cvReleaseCapture( &capture ); } else { const char* filename = input_name ? input_name : (char*)"lena.jpg"; IplImage* image = cvLoadImage( filename, 1 ); if( image ) { detect_and_draw( image ); cvWaitKey(0); cvReleaseImage( &image ); } else { /* assume it is a text file containing the list of the image filenames to be processed - one per line */ FILE* f = fopen( filename, "rt" ); if( f ) { char buf[1000+1]; while( fgets( buf, 1000, f ) ) { int len = (int)strlen(buf); while( len > 0 && isspace(buf[len-1]) ) len--; buf[len] = '\0'; image = cvLoadImage( buf, 1 ); if( image ) { detect_and_draw( image ); cvWaitKey(0); cvReleaseImage( &image ); } } fclose(f); } } } cvDestroyWindow("result"); return 0; } のようにOpenCVはコマンドライン引数からのプログラムで成り立っているのですが、これは別の関数に置き換えて自分のプログラムの中に挿入したいのですが・・・・どのような値をいれたら出力をするのかがわかりません。。。。 ようするにこのint main関数をかえてint sub_mainとおいて int main(void){ int....... sub_main(); ←別のmain内で呼ぶ } 説明の仕方が悪いと思いますが、申し訳ありませんがお教えして貰いたいです。。。

みんなの回答

回答No.2

> 試してみたところ、ビルドは成功して実行はできるのですが・・・ > ... "もともとのアプリケーション"は正しく実行されることは確認済ですよね? "もともとのアプリケーション"実行時のコマンドラインがたとえば motomoto --cascade=foo bar であったなら、 char* argv[] = { "motomoto", "--cascade=foo", "bar", 0 }; int argc = 3; sub_main(argc,argv); となります。

kobeya
質問者

お礼

御説明ありがとうございます。 プログラムのほうがようやく正常に起動いたしました。 これも丁寧なご説明のおかげで本当に感謝しています。

すると、全ての回答が全文表示されます。
回答No.1

たとえば引数 "abc", "def", "ghi" を渡したいなら: char* argv[] = { "abc", "def", "ghi", 0 }; int argc = 3; sub_main(argc,argv);

kobeya
質問者

お礼

ありがとうございます!!!!! 早速試してみます!!

kobeya
質問者

補足

試してみたところ、ビルドは成功して実行はできるのですが・・・ OpenCVによるカメラのプログラムは終了できても永遠に カメラを使っているとみなされます。。。 なのでもう一度実行をしようにも、実行することができません 文が少しおかしい部分がありますがご了承ください。。。

すると、全ての回答が全文表示されます。

関連するQ&A