2016-09-06 2 views
1

WebCamからビデオストリームを取得する簡単なOpenCVアプリケーションがあります。spacebarを押すと、現在の画像がキャプチャされ、その画像がフリーズします。ディスクに画像を保存するためにcv::imwrite()メソッドを使用しようとすると、画像が機能しません。コードは正常にコンパイルされますが、イメージは保存されません。呼び出しからも偽の値が返されます。これがイメージのタイプの問題なのかどうかは分かりませんが、私は困惑しているようです。OpenCV imwriteが動作しない

#include <iostream> 

#include "opencv2/imgproc/imgproc.hpp" 
#include "opencv2/highgui/highgui.hpp" 

using namespace std; 
using namespace cv; 

Mat picture; 
char key; 

class FacialRec { 

}; 

int main() { 
    //Starting the video 
    VideoCapture videoCapture(0); 

    if (!videoCapture.isOpened()) { 
     cout << "Unable to open video file." << endl; 
     return 1; 
    } 

    namedWindow("Webcam", CV_WINDOW_AUTOSIZE); 

    while(true) { 
     Mat frame; 
     videoCapture.retrieve(frame); 
     bool success = videoCapture.read(frame); 

     if (!success) { 
      cout << "Could not read from video file" << endl; 
      return 1; 
     } 

     imshow("Webcam", frame); 
     key = waitKey(30); 

     if (key == 27) { //escape key pressed: stop program 
      cout << "ESC pressed. Program closing..." << endl; 
      break; 
     }else if (key == ' ') { //spacebar pressed: take a picture 
      picture = frame; 
      key = -1; 

      while (true) { 
       imshow("Webcam", picture); 

       key = waitKey(30); 

       if (key == 27 || key == 32) { 
        cout << "ESC or SPACE pressed. Returning to video..." << endl; 
        break; 
       } 

       if (key == 115) { 
        //trying to save to current directory 
        bool maybe = imwrite("/testimage.jpg", picture); 
        // maybe bool is always getting value of 0, or false 
        cout << "s was pressed. saving image " << maybe << endl; 
       } 
      } 
     } 

    } 

    return 0; 
} 

答えて

2

/ディレクトリにtestimage.jpgを書き込もうとしています。実行中のプログラムには、おそらくそのディレクトリに書き込むための十分な権限がありません。あなたのコメントをもとに、あなたはおそらく.以来

//trying to save to current directory 
bool maybe = imwrite("./testimage.jpg", picture); 

は、現在の作業ディレクトリを表したいと思います。

+0

ありがとう!ディレクトリの作成方法について完全にはわかっていませんでした。これで解決しました。 –

0

いくつかの提案:ここ

は私の現在のcppのクラスのコードです。

  1. 別のファイル形式を試してください。
  2. あなたのIDEはあなたのターゲットフォルダ/ホームパスディレクトリを辛抱強く知っていますか?
  3. あなたの画像は間違いありませんか?あなたがimshow()をしたときに表示されますか?
1

OpenCVには、.jpgイメージへの書き込みに問題があることがあります。その変更が.pngまたは.bmpに変更されているかどうか確認してください。

あなたが書き込み画像と、さらに問題がある場合は、あなたがそれらを表示し、それらが有効であるかどうかを確認するためにこのコードの数行を追加することにより、OpenCVでそれらをデバッグすることができます。

// Create a window for display. 
namedWindow("Display window", WINDOW_AUTOSIZE); 

// Show our image inside it. 
imshow("Display window", picture);     

// Wait for a keystroke in the window 
waitKey(0);           
+0

これをブールに割り当てると、まだ関数が呼び出されますが、これは違いはありません。実際、それは成功の記録を保持するので、それは良いです! –

+0

あなたは正しく編集されています –

+0

ディレクトリが問題であったようですが、それを表示する手助けをしてくれてありがとう。別の問題を修正しました。 –

関連する問題