OpenCV初心者のためのプログラム実行時の問題

このQ&Aのポイント
  • OpenCVを使用してWebカメラから映像を取得しようとしていますが、実行画面には映像が表示されず、エラーも出ていません。
  • 使用しているWebカメラは「LifeCam VX-1000」で、初期設定も正しく行っています。
  • 参考にしている書籍は「OpenCV プログラミングブック 第2版」です。アドバイスをお願いします。
回答を見る
  • ベストアンサー

opencvについて

OpenCVの初歩のプログラムなんですが実行するとコマンドプロンプトと実行画面が出てきます。しかし実行画面には何も映りません。エラーも出ず、正しくビルドされています。使用しているwebカメラはMicrosoft社の「LifeCam VX-1000」です。初期設定も正しく設定しました。参考にしているものは、「OpenCV プログラミングブック 第2版」です。どなたかアドバイスお願いします。 プログラム↓ #include <stdio.h> #include <highgui.h> int main(int argc, char** argv) { CvCapture *capture; IplImage *frameImage; char windowNameCapture[] = "Capture"; capture = cvCreateCameraCapture(0); cvNamedWindow(windowNameCapture, CV_WINDOW_AUTOSIZE); while (1) { frameImage = cvQueryFrame(capture); cvShowImage(windowNameCapture, frameImage); if (cvWaitKey(33) == 'q') break; } cvReleaseCapture(&capture); cvDestroyWindow(windowNameCapture); return 0; }

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

全然知らないのにアドバイスするのも何なんですが http://opencv.jp/sample/video_io.html こちらのコードと比べると(2)のキャプチャサイズの設定がないようですが、指定したらどうなりますか? あるいはそれ以前に >capture = cvCreateCameraCapture(0); で、CvCapture 構造体が初期化されていることは確認済みでしょうか?

関連するQ&A

  • OpenCV webカメラ同時出力について

    opencvで画像処理をしています。 Webカメラを2台同時に出力させるプログラムをつくりたいと思っているのですが、方法が全く分かりません。 どうすれば2台同時に出力させることができますか? 1台だけ出力させるプログラムはこちらを使っています。 #include <stdio.h> #include <highgui.h> int main( int argc, char** argv ){ int key; // キー入力用の変数 CvCapture *capture; // カメラキャプチャ用の構造体 IplImage *frameImage; // キャプチャ画像用IplImage char windowNameCapture[] = "Capture"; // キャプチャした画像を表示するウィンドウの名前 // カメラを初期化する if ( ( capture = cvCreateCameraCapture( -1 ) ) == NULL ) { // カメラが見つからなかった場合 printf( "カメラが見つかりません\n" ); return -1; } // ウィンドウを生成する cvNamedWindow( windowNameCapture, CV_WINDOW_AUTOSIZE ); // メインループ while ( 1 ) { // カメラからの入力画像1フレームをframeImageに格納する frameImage = cvQueryFrame( capture ); // 画像を表示する cvShowImage( windowNameCapture, frameImage ); // 'q'キーが入力されたらループを抜ける key = cvWaitKey( 1 ); if ( key == 'q' ) { break; } } // キャプチャを解放する cvReleaseCapture( &capture ); // ウィンドウを破棄する cvDestroyWindow( windowNameCapture ); return 0; }

  • OpenCV プログラムについて

    webカメラを表示するプログラムをつくりました。 しかし、webカメラのウィンドウが小さいのでフルウィンドウにして表示させたいです。 どうすればフルウィンドウでwebカメラを表示することができますか? 解答よろしくお願いします #include <stdio.h> #include <highgui.h> int main( int argc, char** argv ){ int key; // キー入力用の変数 CvCapture *capture; // カメラキャプチャ用の構造体 IplImage *frameImage; // キャプチャ画像用IplImage char windowNameCapture[] = "Capture"; // キャプチャした画像を表示するウィンドウの名前 // カメラを初期化する if ( ( capture = cvCreateCameraCapture( -1 ) ) == NULL ) { // カメラが見つからなかった場合 printf( "カメラが見つかりません\n" ); return -1; } // ウィンドウを生成する cvNamedWindow( windowNameCapture, CV_WINDOW_AUTOSIZE ); // メインループ while ( 1 ) { // カメラからの入力画像1フレームをframeImageに格納する frameImage = cvQueryFrame( capture ); // 画像を表示する cvShowImage( windowNameCapture, frameImage ); // 'q'キーが入力されたらループを抜ける key = cvWaitKey( 1 ); if ( key == 'q' ) { break; } } // キャプチャを解放する cvReleaseCapture( &capture ); // ウィンドウを破棄する cvDestroyWindow( windowNameCapture ); return 0; }

  • OpenCVによる連続静止画保存

    OpenCVとVisual Studio 2005を使ってカメラ画像を出力し、キーを押すことで画像をファイルに保存しています。しかし、キーを押すたびに画像が上書きされてしまい、結局保存ファイルは一つだけになってしまい連続して画像ファイルが取得できません。下記のプログラムで下のほうに書いてあるcvSaveImage()関数にうまくカウンタを使ってやればいいと思うのですが、私の技量ではできませんでした。知っている方がいたら教えてください。よろしくお願いします。 //--------------------------------------------------------- // 概要 : カメラからの入力画像をそのまま表示 // File Name : image.c // Library : OpenCV for MS-Windows 1.0 //--------------------------------------------------------- #include <stdio.h> #include <highgui.h> int main( int argc, char** argv ){ int key; // キー入力用の変数 CvCapture *capture; // カメラキャプチャ用の構造体 IplImage *frameImage; // キャプチャ画像用IplImage char windowNameCapture[] = "Capture"; // キャプチャした画像を表示するウィンドウの名前 // カメラを初期化する if ( ( capture = cvCreateCameraCapture( -1 ) ) == NULL ) { // カメラが見つからなかった場合 printf( "カメラが見つかりません\n" ); return -1; } // ウィンドウを生成する cvNamedWindow( windowNameCapture, CV_WINDOW_AUTOSIZE ); // メインループ while ( 1 ) { // カメラからの入力画像1フレームをframeImageに格納する frameImage = cvQueryFrame( capture ); // 画像を表示する cvShowImage( windowNameCapture, frameImage ); // 'q'キーが入力されたらループを抜ける key = cvWaitKey( 1 ); if ( key == 'q' ) { break; }else if( key == 'c'){ cvSaveImage("picture.bmp", frameImage ); } } // キャプチャを解放する cvReleaseCapture( &capture ); // ウィンドウを破棄する cvDestroyWindow( windowNameCapture ); return 0; }

  • OpenCVを用いて任意の時間で静止画を保存したい。

    OpenCVを用いて"s"キーを押したら静止画保存が始まり、再度"s"キーを押したら保存が終了しるプログラムを作成しています。(保存レートは1秒間で30フレームの静止画保存で考えています)また、保存する静止画を指定したフォルダに保存するプログラムを作成していますが、プログラム作成の経験が浅く、なかなかうまく作れず困っております。どのようにプログラムを組めばこのようなプログラムが作れるのでしょうか。下記のプログラムは作成でき、これを基礎にして作り上げていこうと考えています。プログラムの内容としては"c"キーを押した分だけ、連番でbip形式で画像を保存するプログラムです。精度の関係上timegettime関数を使用したいと考えているのですが、、。 <ソースプログラム> #include <stdio.h> #include <highgui.h> int main( int argc, char** argv ){ int key; // キー入力用変数 int counter = 0; CvCapture *capture; // キャプチャ用構造体 IplImage *frameImage; // キャプチャ画像用IplImage char str[32]; char windowNameCapture[] = "CMOS Camera Image"; // ウィンドウネーム // カメラの初期化 if( ( capture = cvCreateCameraCapture(-1)) == NULL ){ // カメラデバイスが検出できない場合 printf("カメラデバイスを検出できません\n"); return -1; } // ウィンドウ生成 cvNamedWindow( windowNameCapture, CV_WINDOW_AUTOSIZE ); // メインループ while(1){ // カメラからの1フレームをframeImageに格納 frameImage = cvQueryFrame( capture ); // 画像表示 cvShowImage( windowNameCapture, frameImage ); // 'ESC'キーが入力されたらループを抜ける key = cvWaitKey(1); if( key == '\x1b' ){ break; // 静止画保存 } else if( key == 'c'){ sprintf_s(str, "cmosview%04d.bmp",counter++); cvSaveImage(str, frameImage ); } } // キャプチャ解放 cvReleaseCapture( &capture ); // ウィンドウ破棄 cvDestroyWindow( windowNameCapture ); return 0; }

  • aviファイルの読み込み

    opencv2.2でaviファイルの読み込みを行うプログラムを作成しました。 しかし、コンパイルは通りますが実行されません。aviファイルはプロジェクトフォルダ内に入れてあるのでパスの間違いはありません。 どうしたら、動くようになるでしょうか? 環境はwindows7の64bitで、visual studio 2010で行っています。 ソースは以下の通りです。 ********************************* int main( int argc, char** argv ) { int k; //映像の読み込み CvCapture* capture; char* captureWindow = "Capture"; ////AVIファイルの読み込み・出力 if((capture = cvCaptureFromFile("pla.avi")) == NULL){ //ファイルが見つからないとき return -1; } img0 = cvQueryFrame(capture); //キャプチャサイズを知るために画像取得 cvNamedWindow( "入力", 1 ); //キャプチャしたフレーム画像をsave[]に格納 for(k=1;;k++){ frame = cvQueryFrame(capture); if(frame == NULL) break; else{ img = cvCloneImage(frame); cvShowImage( "入力", img ); if(cvWaitKey(30) == '\x1b') break; } } cvReleaseCapture(&capture); cvDestroyWindow("入力"); return 0; } **************************** aviファイルはflashで作成したものをaviファイルに書き出したものです。

  • opencv1.0 画面が真っ黒

    以前までXPを使用しVisual C++ 2008にopencv1.0を導入し、USB接続のwebカメラから 画像をキャプチャしリアルタイムでの画像処理などのプログラミングしていたのですが、 このたびOSをXP(32bit) からwindows7(64bit)に変え、前使っていた環境つまり Visual C++ 2008 opencv1.0 で設定したところ、コンパイルは正常にでき、普通にpng画像などを取り込むような画像処理は可能なのですが、webカメラからの画像が読み込めず、真っ黒な画像が表示されてしまいました。 ちなみに実行したプログラムはXPの時には正常に作動していたものと同じものを実行しています。 また、webカメラ自体はamcapなどのソフトを使い動作させることはできます。 自分なりに考えた問題点は、 プログラムに問題がある、またはvisualC++を2010にする、opencvを2.2などの最新版に 更新するなどがあげられますが、 この場合なにが原因として考えられるのでしょうか? その点アドバイスいただけたらうれしく思います。 よろしくお願いします。 実行したプログラムは以下の通りです(取り込んだ画像を表示しているだけの、シンプルなプログラムです。直すところなどありましたら教えてください。) *************************************************** #include <cv.h> #include <highgui.h> #pragma comment(lib,"cv.lib") #pragma comment(lib,"cxcore.lib") #pragma comment(lib,"highgui.lib") int main(int argc, char** argv){ int key; CvCapture* capture; capture=cvCreateCameraCapture(-1); IplImage *frameImg =cvQueryFrame(capture); cvNamedWindow("Capture" ,CV_WINDOW_AUTOSIZE); while(1){ cvShowImage("Capture",frameImg); key = cvWaitKey(1); if(key=='q') break; } cvReleaseCapture(&capture); cvDestroyWindow("Capture"); return 0; } ****************************************************

  • Opencvで質問

     Opencv初心者です。  今日opencvとVC++2010を設定して今練習中なのですが   #include <stdexcept>   #include <opencv/cv.h>   #include <opencv/highgui.h>   int main (int argc, char* argv[]){   const char *fileName = "C:\\Program Files\\OpenCV2.3.1\\samples\\c\\lena.jpg";   const char *windowName = "lena";   ::IplImage* img = ::cvLoadImage(fileName);   ::cvNamedWindow(windowName);   ::cvShowImage(windowName,img);   ::cvWaitKey();   ::cvDestroyWindow(windowName);   ::cvReleaseImage(&img);   }  と言うサンプルをビルドしたら  1>------ ビルド開始: プロジェクト: 画像処理練習, 構成: Debug Win32 ------  1>LINK : fatal error LNK1104: ファイル 'opencv_core231.lib' を開くことができません。  ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========  エラーが出てしまい先に進めません。  もしかしたら他に設定が悪いのでしょうか?  インストールもC:\Program Files\OpenCV2.3.1に名前も変えインストールしました。  ttp://shiotani.cn/20110904vc2010opencv.html  ここを参考にさせていただきました。 よろしくお願いします。

  • OpenCVで画像を読み込みたい

    OpenCVを勉強しようと思い先日始めました。 http://chihara.naist.jp/opencv/?FrontPage 上記のサイトに掲載されている通りにVC++ 2008 EEで ・環境変数PATH ・インクルードファイル ・ライブラリファイル ・リンカ の設定をしました。 これでいざプログラムをコンパイルして実行すると何故か画像が読み込んでくれません。 これらの設定以外の他にするべきことがあるのでしょうか? いきなり出鼻を挫かれたので困っています。よろしくお願いします。 OS:XP SP2 開発環境:VC++ 2008 EE 実行したプログラム ---------------------------------------------------------------- #include "cv.h" #include "highgui.h" int main( int argc, char** argv ) { IplImage* img; char* filename = "abc.bmp"; if( argc == 2 && (img = cvLoadImage( filename, 1)) != 0 ) { cvNamedWindow( "Image view", 1 ); cvShowImage( "Image view", img ); cvWaitKey(0); // イベント処理を含む場合には,これが重要. cvDestroyWindow( "Image view" ); cvReleaseImage( &img ); return 0; } return -1; } ----------------------------------------------------------------

  • OpenCVでのavi動画ファイルの指定

     現在Visual Studio 2005とOpenCVを用いて、avi動画を表示させようとしているのですが、ファイルを指定しても無いものと判断され出力できない状況です。同じような質問があったのですが、結局コマンドプロンプトの移動というのがよくわからなかったため分かる方がいたら教えていただきたいです。  avi動画ファイルはC:\\Documents and Settings\\user\\デスクトップ\\a.aviにあり、以下のプロジェクトファイルはC:\Documents and Settings\user\My Documents\Visual Studio 2005\Projects\cv\cvにあります。 //--------------------------------------------------------- // 概要 : 動画(aviファイル)読み込み // File Name : LoadVideo.cpp // Library : OpenCV for MS-Windows beta5 // Auther : Yasuhiro Yoshimura // Date : Dec 26, 2005; 22:22 //--------------------------------------------------------- #include "cv.h" #include "cxcore.h" #include "highgui.h" #include <stdio.h> //読み込む動画ファイル名 char* filename="C:\\Documents and Settings\\user\\デスクトップ\\a.avi"; //IplImage IplImage* src; int main(){ CvCapture* capture = NULL; int key; //キー入力 //指定したAVIファイルが見つからない場合 if(NULL==(capture = cvCaptureFromAVI(filename))){ fprintf(stderr,"指定のaviファイルが見つかりませんでした."); return -1; } //画像表示ウィンドウの準備 cvNamedWindow("Source Image", CV_WINDOW_AUTOSIZE); //画像表示ウィンドウの出現位置指定 cvMoveWindow("Source Image", 50, 50); //処理ループの開始 for(;;){ //AVIファイルからフレーム画像を取り出す if(NULL==(src=cvQueryFrame(capture))){ break; } //画像表示 cvShowImage("Source Image", src); //キー入力 key = cvWaitKey(10); //ESCキーを押すと終了 if(key==0x1b) break; } //解放 cvReleaseCapture(&capture); cvDestroyWindow("Source Image"); return 0; } よろしくお願いします。

  • OpenCVでのプログラミングについての質問です

    Visual Studio2013でOpenCVを使えるようにし、現在USBカメラの映像をキャプチャする簡単なプログラムを作っています。 今は、 #include <opencv2/opencv.hpp> #include <opencv2/opencv_lib.hpp> #include <ctype.h> void Mouse( int event, int x, int y, int flags ,void *param); //マウス宣言 int main( int argc, char **argv) { // カメラからのビデオキャプチャを初期化する CvCapture *videoCapture = cvCreateCameraCapture( 1 ); cvSetCaptureProperty(videoCapture,CV_CAP_PROP_FRAME_WIDTH,1920); cvSetCaptureProperty(videoCapture,CV_CAP_PROP_FRAME_HEIGHT,1080); if( videoCapture == NULL ) { return -1; } // ウィンドウを作成する char windowName[] = "キャプチャ"; cvNamedWindow( windowName, CV_WINDOW_NORMAL|CV_WINDOW_FREERATIO ); // 何かキーが押下されるまで、ループをくり返す while( cvWaitKey( 1 ) == -1 ) { // カメラから1フレーム取得する IplImage *image = cvQueryFrame( videoCapture ); // ウィンドウに画像を表示する cvShowImage( windowName, image ); cvSetMouseCallback(windowName, Mouse); //マウスのコールバック関数登録 } // ビデオキャプチャを解放する cvReleaseCapture( &videoCapture ); // ウィンドウを破棄する cvDestroyWindow( windowName ); return 0; } void Mouse( int event, int x, int y, int flags ,void *param = NULL) // コールバック関数 { switch(event) { case CV_EVENT_LBUTTONDOWN: std::cout << x << "," << y << "\n"; //マウスの左クリックがされたときにその座標を読み込む break; default: break; } } このように記述し、新しいウィンドウにキャプチャしている映像を取得し、そのウィンドウ上でクリックされた座標を取得する、というプログラムになっています。 これを、 「クリックされた周辺一定範囲の映像を拡大して表示する」 というものにしたいのですが、プログラミング経験が浅く、調べながらいろいろ試行錯誤しても上手く動くプログラムを書くことができません。 どなたかアドバイスをいただけないでしょうか?

専門家に質問してみよう