2

このWebサイトにあるソリューションを使用して、AndroidアプリでOpenCvからマットのデータにアクセスしようとしました。

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

3行目でアプリがクラッシュし、次のエラーが発生します: java.lang.UnsupportedOperationException: Mat data type is not compatible: 0

理由はわかりません。ここからのコピー/貼り付けです:Android用OpenCV - Matの要素にアクセスする

ここで OpenCV の get メソッドからのコピー/貼り付け:

public int get(int row, int col, double[] data) {
    int t = type();
    if (data == null || data.length % CvType.channels(t) != 0)
        throw new java.lang.UnsupportedOperationException(
                "Provided data element number (" +
                        (data == null ? 0 : data.length) +
                        ") should be multiple of the Mat channels count (" +
                        CvType.channels(t) + ")");
    if (CvType.depth(t) == CvType.CV_64F) {
        return nGetD(nativeObj, row, col, data.length, data);
    }
    throw new java.lang.UnsupportedOperationException("Mat data type is not compatible: " + t);
}

私のthis.getMyMat()がから取得されることを正確に忘れていました:

Imgproc.adaptiveThreshold(this.getMyGrayMat(), dst, max_BINARY_value, Imgproc.ADAPTIVE_THRESH_GAUSSIAN_C, threshold_type, 27, 3);

つまり、これは純粋な白黒のマットです。

4

1 に答える 1

2

質問の最後で言ったように、私のマットは白黒です。

だから私は使用する必要はありません

double[] buff = new double[size];

しかし

byte[] buff = new byte[size];
于 2013-08-01T13:07:49.547 に答える