2
ImageManipulationsActivity.VIEW_MODE_BINARY:
capture.retrieve(mRgba, Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA);

Mat binary = new Mat();
Imgproc.cvtColor(mRgba,binary, Imgproc.COLOR_RGBA2GRAY, 4);

int size = (int) binary.total() * binary.channels();
double[] buff = new double[size];
binary.get(0, 0, buff);

for(int i = 0; i < size; i++)
{
    buff[i] = (buff[i] >= 0) ? 1 : 0;
}

Mat bv = new Mat(binary.size(), CvType.CV_8U);
bv.put(0, 0, buff);

Imgproc.cvtColor(binary, mRgba, Imgproc.COLOR_GRAY2RGBA, 4);

break;

上記のコードは、opencv4androidでグレー画像を2値化するために使用されますが、それが機能しないことがわかるまで、ここから上記のコードをコピーします。上記のコードで、次のようにします。

  1. :capture.retrieveを使用してマット画像を取得します
  2. Imgproc.cvtColorを使用して画像をグレースケールに変換する
  3. 上記のコードのようにJavaPrimitiveArrayを使用して2値化する
  4. 次に、グレーからrgbaに変換し直します
  5. ビットマップbmpを使用して結果を表示する

何か提案があれば教えてください。上記のコードから何が間違っているのかわかりません。エラーはありませんが、アプリをインストールして実行すると、常に強制終了します。

これはアプリからのlogcatです:

致命的な例外:スレッド-10 java.lang.UnsupportedOperationException:マットデータタイプに互換性がありません:0 org.opencv.core.Mat.get(Mat.java:2042)at org.opencv.samples.imagemanipulations.ImageManipulationsView.processFrame( ImageM‌ anipulationsView.java:158)at org.opencv.samples.imagemanipulations.SampleCvViewBase.run(SampleCvViewBase.java‌:99)at org.opencv.samples.imagemanipulations.ImageManipulationsView.run(ImageManipulati‌onsView.java:195)at java.lang.Thread.run(Thread.java:1019)

4

1 に答える 1

3

マットのデフォルトタイプは、シングルチャネルまたは3チャネル(BGR)のどちらでもCV_8UC1です-基本構造OpenCV-

于 2013-04-28T14:59:31.203 に答える