Как обнаружить указанный c объект на изображении - PullRequest
0 голосов
/ 30 января 2020

У меня есть 32 алфавитные карточки, такие как приложение OSMO (https://www.playosmo.com/en/words/). Я хочу распознать их в изображении или в реальном времени в кадрах камеры, и я хочу это приложение для устройства android поэтому я использовал opencv и c ++ для этой цели.
методы, которые я пробовал

  • сначала я использовал sift, surf и orb для получения ключевых точек и сравнивал их со статическим c изображением карты
  • вторым методом был k ближайшего соседа. и создайте два xml файла, один из которых содержит пиксели всего изображения поезда в двоичном режиме, а другой - файл классификации, представляющий собой карту для обученного изображения.

первый метод имел Проблема, которая была ключевым, может меняться в реальном времени и не является уникальной. так что соответствие ключевых точек не очень хорошо. Вторая проблема метода состояла в том, что загрузка xml файла была слишком долгой в устройстве android. так что теперь мне нужна помощь Есть ли быстрый надежный метод? что я могу сделать?

1 Ответ

0 голосов
/ 22 февраля 2020

наконец-то я нашел способ обнаружить буквы в майских карточках для распознавания букв в карточках я использую моменты Ху что-то вроде соответствия формы, но это более точно https://www.learnopencv.com/shape-matching-using-hu-moments-c-python/ ниже код повторить двойной, который отличается между двумя изображениями поэтому я использую другое и сравниваю его с другим изображением, а затем распознаю букву на изображении.

double HuMatchingShape(double*  secondMoments,double* firstMoments)
{
    double dif = 0;
    int counter = 0;
    for (int i = 0; i < 7; i++)
    {
        dif += (firstMoments[i] - secondMoments[i]) * (firstMoments[i] -secondMoments[i]);
    }
    return sqrt(dif);
}

double* getHuMoments(Mat img)
{
    Moments moments = cv::moments(img,true);

    // Calculate Hu Moments
    double * huMoments =  new double[7];

    HuMoments(moments, huMoments);
    for (int i = 0; i < 7; i++)
    {
        huMoments[i] = -1 * copysign(1.0, huMoments[i]) * log10(abs(huMoments[i]));
    }

    return huMoments;
}

int main()
{
   Mat image1 = imread("image path");
   Mat image2 =  imread("second image path");
   // make these two images binary 
   image1 = makeItBinay(image1);
   image2 = makeItBinay(image2);
   // calculate different between two image with hu moments 
   double different = HuMatchingShape(getHuMoments(image1), getHuMoments(image2));
   return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...