3

現在試しています

<code>
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
        mRgba = inputFrame.rgba();
        Imgproc.Canny(mRgba, markers, 80, 90);
        Mat threeChannel = new Mat();
        Imgproc.cvtColor(mRgba, threeChannel, Imgproc.COLOR_BGR2GRAY);
        Imgproc.watershed(threeChannel, markers);
        return threeChannel;
}

</code>

しかし、それは失敗します

CvException [org.opencv.core.CvException: /home/reports/ci/slave/50-SDK/opencv/modules/imgproc/src/segmentation.cpp:147: error: (-210) Only 8-bit, 3-channel input images are supported in function void cvWatershed(const CvArr*, CvArr*)

Canny / Sobelエッジ検出のマーカーを適切に使用して、Watershedアルゴリズムにフィードする方法を教えてください。これは私の最初のAndroidプロジェクトであるため、Android固有のものは非常に役立ちます。

4

2 に答える 2

4

エラーは、の入力画像が8ビット3チャネルwatershed()画像でなければならないことを示しています。を呼び出した後、のチャンネル数を出力します。1を出力しても驚かないでください。cvtColor()threeChannel

mRgbaに直接渡してwatershed()、何が起こるかを確認してください。私の以前の回答の1つには、流域を使用した動作コードがあります。これをテストに使用できます。

于 2013-03-24T18:49:50.413 に答える
1

画像を4チャンネルから3チャンネルに変換するだけです。例えば

Imgproc.cvtColor(mat , mat, Imgproc.COLOR_BGRA2BGR);
于 2015-08-07T16:50:33.600 に答える