2016-08-31 6 views
0

アルゴリズムの出力でopencvを使って表示画像を撮影する方法はありますか? thisのように、この方法は効率的ではないスクリーンショット(powr + vol dwn)を使用して行われます。色ブロブ検出器で画像を撮るOpencv

Color blob検出の出力を含めたかったのです。私はスクリーンショットの方法を行ってきましたが、問題はopencvでイメージを取得する方法が異なるため、おそらく常に黒であるということです。

答えて

0

これが正しいとあなたがOpenCVのでColorBlobDetection例に使用したり、構築しているならば、あなたが実際に既にイメージを持っている場合、私はあなただけなど、メイン画像ではなく、ヘッダメニューバーをしたい

を想定していますColorBlobDetectionActivityの 'onCameraFrame'メソッドの出力で、つまり、mRgba行列が返される必要があります。

imwriteを使用して保存するか保存することができます。ここで

がテストされ、動作しますサンプルコードである - 実際には、あなたはおそらく、すべてのフレームでこれを行うと、代わりにいくつかのトリガーが設定されている場合、一度にそれを行うにはしたくないが、以下のコードは、一般的なアイデアを与える:

public Mat onCameraFrame(CvCameraViewFrame inputFrame) { 
     mRgba = inputFrame.rgba(); 

     if (mIsColorSelected) { 
      mDetector.process(mRgba); 
      List<MatOfPoint> contours = mDetector.getContours(); 
      Log.e(TAG, "Contours count: " + contours.size()); 
      Imgproc.drawContours(mRgba, contours, -1, CONTOUR_COLOR); 

      Mat colorLabel = mRgba.submat(4, 68, 4, 68); 
      colorLabel.setTo(mBlobColorRgba); 

      Mat spectrumLabel = mRgba.submat(4, 4 + mSpectrum.rows(), 70, 70 + mSpectrum.cols()); 
      mSpectrum.copyTo(spectrumLabel); 

      File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); 
      String testFilename = "TestOCVwrite.png"; 
      File testFile = new File(path, testFilename); 
      String testFullfileName = testFile.toString(); 
      Log.i(TAG, "Writing to filename: " + testFilename); 
      Boolean writeResult = Imgcodecs.imwrite(testFullfileName, mRgba); 
      if (!writeResult) { 
       Log.i(TAG, "Failed to write to filename: " + testFilename); 
      } 
     } 

     return mRgba; 
    } 

に注意すべき点:

はあなたのマニフェストに外部への書き込み権限が含まれていることを確認してください:あなたはメートルもする必要が

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

png、jpegなどのファイル名にファイルタイプを含めてください。それ以外の場合は、エラーが表示されます。

could not find a writer for the specified extension in function bool cv::imwrite_(const cv::String&, const cv::Mat&, const std::vector&, bool)

関連する問題