Annisa Kartikasari Ответов: 2

Почему мой дефект выпуклости OpenCV в Android получает ошибку?


Я новичок в разработке android и новичок в OpenCV тоже. У меня есть проект о распознавании жестов рук в Android. Я хочу сделать на нем дефект выпуклости. Прежде чем я сделаю дефект выпуклости, я должен был найти контур и выпуклую оболочку. Я их уже сделал. Теперь я делаю дефект выпуклости, чтобы получить дефект кисти и пальцев. Но тут что-то не так. Когда я строю свой код с дефектом выпуклости в моем Андроиде, он, к сожалению, останавливается. Я не знаю, является ли моя функция дефекта выпуклости неправильной, или то, как я получаю значение дефекта (MatOfInt4) в точку, неверно. Кто-нибудь, пожалуйста, помогите мне. Спасибо. Это мой код :

List<MatOfInt> hull = new ArrayList<MatOfInt>();
List<MatOfInt4> defect = new ArrayList<MatOfInt4>();
for(int i = 0; i < newContours.size(); i++)
     {
         hull.add(new MatOfInt());
         Imgproc.convexHull(newContours.get(i), hull.get(i));
         Imgproc.convexityDefects(newContours.get(i), hull.get(i), defect.get(i));
     }

     Point defectSP= new Point();
     Point defectEP= new Point();
     Point defectFP= new Point();
     for(int i = 0; i < defect.size(); i++)
     {
         Point[] startP = new Point[newContours.get(i).rows()];
         Point[] endP = new Point[newContours.get(i).rows()];
         Point[] farP = new Point[newContours.get(i).rows()];
         Point[] depthP = new Point[newContours.get(i).rows()];

         for(int j = 0; j < defect.get(i).rows(); j++)
         {
             int distP = (int) defect.get(i).get(j, 3)[3];
             if (distP > 20*256)
             {
                 startId = (int) defect.get(i).get(j, 0)[0];
                 endId = (int) defect.get(i).get(j, 1)[1];
                 farId = (int) defect.get(i).get(j, 2)[2];

                 defectSP.x = startId;
                 defectSP.y = startId;
                 defectEP.x = endId;
                 defectEP.y = endId;
                 defectFP.x = farId;
                 defectFP.y = farId;
             }
          }
      }

2 Ответов

Рейтинг:
18

Richard MacCutchan

Скорее всего, вы пытаетесь использовать переменную, которая где-то не была инициализирована. В следующих двух строках вы создаете новую запись в hull список, а затем отправить его по адресу Imgproc.convexHull Однако у вас может не быть никаких данных в нем.

hull.add(new MatOfInt()); // add a new MatOfInt, but what does it contain?
Imgproc.convexHull(newContours.get(i), hull.get(i));


Annisa Kartikasari

@Richard MacCutchan это не проблема. Мне нужна эта строка, чтобы добавить новый тип данных MatOfInt в переменную hull, которая будет использоваться для хранения данных hull из функции Imgproc.convexHull. Итак, я получил данные из функции Imgproc.convexHull. И я преуспел в этом, результат проявился. Проблема в том, что когда я пытаюсь сделать дефект выпуклости с помощью функции Imgproc.convexityDefect, приложения, к сожалению, останавливаются, когда я отлаживаю их на своем android-устройстве.

Richard MacCutchan

Где он остановился и какие сообщения появились в журнале отладки?

Annisa Kartikasari

Я решил эту проблему. Спасибо за вашу помощь

Рейтинг:
1

Member 13114523

пожалуйста, как вы решили это позже ?