Режим брошюровщика OpenCV: СКАНИРОВАНИЕ с определенными свойствами - PullRequest
0 голосов
/ 09 октября 2018

Я пытаюсь настроить приложение для сшивания плоских изображений, но если я предоставлю брошюровщик ниже PlaneWarper, приложение вылетает с исключением из-за плохого доступа.Я также узнал, что функция поиска ORB лучше всего подходит для плоского сшивания, но использование OrbFeatureFinder также приводит к сбою приложения в функции стежка.Я знаю, что не до конца осознаю, как работает конвейер сшивания, поэтому, если кто-то может помочь мне разобраться в проблеме, я был бы признателен.

vector<Mat> imgs;

cv::Mat stitch (vector<Mat>& images)
{
    imgs = images;

    Mat pano;
    Ptr<Stitcher> stitcher = Stitcher::create(Stitcher::SCANS, true);
    stitcher->setPanoConfidenceThresh(0.8f);
    stitcher->setFeaturesMatcher(makePtr<cv::detail::AffineBestOf2NearestMatcher>(true, true, 0.8f));
    Stitcher::Status status = stitcher->stitch(imgs, pano);

    if (status != Stitcher::OK)
    {
        cout << "Can't stitch images, error code = " << int(status) << endl;
        //return 0;
    }
    return pano;
}

Я протестировал на своем Mac программу stitching_detailed с Orbпоиск функций и плоскостная деформация, и это дало мне отличные результаты, поэтому я попытался запустить stitching_detailed.cpp в интерфейсе приложения iOS, но это вызывает все типы сбоев, поэтому я пытаюсь сделать это сейчас.

сшивание работает хорошо, но кое-где есть некоторые искажения, и использование функции поиска ORB с планарной деформацией устраняет ее на моем Mac.

Ответы [ 2 ]

0 голосов
/ 26 июня 2019

Используйте открытую версию прошивки cv 2.4.9 для iOS.Кроме того, используйте этот код, он отлично подойдет для приложения для iOS

https://github.com/foundry/OpenCVSwiftStitch

Я уже потратил слишком много времени, чтобы исправить ошибку, но теперь она исправлена.

0 голосов
/ 09 октября 2018

Я только сделал беглый взгляд, но я подозреваю, что ваша проблема заключается в том, как устроен OpenCV.При работе на Mac он может использовать графический процессор через OpenCL.Однако при работе на устройстве iOS оно не может использовать OpenCL, поскольку оно не поддерживается.Из-за этого он должен использовать реализацию, основанную на ЦП, найденную здесь.

https://github.com/opencv/opencv/blob/808ba552c532408bddd5fe51784cf4209296448a/modules/stitching/src/stitcher.cpp

Вы увидите переменную try_use_gpu, широко используемую и основанную на том, как она конфигурируется и работает,это скорее всего виновник.Хотя я не могу сказать наверняка в вашем случае, ранее я обнаружил, что есть специфическая функциональность iOS, которая нарушена или просто не существует.С учетом вышесказанного вы можете подать проблему с проектом в надежде, что кто-то сможет ее решить и исправить.

...