Java OpenCV не может скопировать из MatOfInt4 в MatOfInt4 - PullRequest
0 голосов
/ 16 июня 2020

У меня есть приложение OpenCV 4.2.0, использующее HoughLinesP для обнаружения линий в изображении, которое отлично работает с C ++ и Objective- C. Теперь мне нужно, чтобы та же функциональность работала для java на Android.

Я уже пару дней борюсь с этим и свел это к следующей проблеме. Я не могу скопировать значение из одного MatOfInt4 в другой MatOfInt4, используя для l oop с lines2.put(i,0, lines.get(i, 0));

Ниже приведен фрагмент кода и результаты журнала. Ошибок компилятора или ошибок времени выполнения нет, просто нет значений, сохраненных в строке назначения MatOfInt4. Либо я неправильно понял, как работает метод put, либо что-то еще не так.

Кто-нибудь знает, где это могло пойти не так? Любые эксперты с Java и OpenCV, способные дать какие-либо рекомендации или исправления к приведенному ниже коду, чтобы он работал?

Вы можете видеть, что строки содержат 180 записей, for l oop насчитывает 180 циклов, но строки2 пусто, когда он закончится. Я могу get() правильно указать значения из строк, и я использую значения в других частях кода, но я не могу put() ничего в строках 2.

MatOfInt4 lines = new MatOfInt4();

lines = houghLinesP(sub);

Log.i(TAG, "Total Sub Lines Returned: " + lines.size());

MatOfInt4 lines2 = new MatOfInt4();

for(int i = 0; i <  lines.rows(); i++) {

    lines2.put(i,0, lines.get(i, 0));

    Log.i(TAG, "Count of loop: " + i);
}

Log.i(TAG, "Dump of lines2 Returned: " + lines2.dump());

Log.i(TAG, "Total Lines2 Returned: " + lines2.size());

Результаты тестового кода:

Общее количество возвращенных подстрок: 1x180

Дамп возвращенных строк2: []

Количество l oop: 180

Всего возвращенных строк2: 0x0

Мы будем благодарны за любую помощь или руководство.

1 Ответ

1 голос
/ 17 июня 2020

Матрица lines2 не имеет размера, поэтому вы не можете устанавливать в ней значения. Чтобы решить эту проблему, вы можете выделить матрицу подходящего размера, например,

MatOfInt4 lines2 = new MatOfInt4();
lines2.create(1,lines.rows(), lines.type());

// alternatively:
Mat lines2 = new Mat(1,lines.rows(), lines.type());

Если вы больше ничего не делаете в l oop, вы также можете просто транспонировать матрицу для достижения того же результата. :

Mat lines2 = lines.t();

Эта транспонированная матрица уже будет содержать правильные значения. Для моего примера изображения это дает следующий результат:

Total Sub Lines Returned: 1x295
Dump of lines2 Returned: [9, 187, 137, 201, 353, 211, 430, 213, 95, etc...
Total Lines2 Returned: 295x1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...