Использование SURF в openv не удается из-за нарушения прав на запись - PullRequest
1 голос
/ 17 июня 2020

Я пытаюсь найти положение изображения на другом изображении с помощью SURF, но каждый раз, когда я пытаюсь инициализировать детектор, он терпит неудачу, сообщая мне, что было нарушение прав доступа и что детектор.Ptr был «0xFFFFFFFFFFFFFF». Мой код:

auto detector = cv::xfeatures2d::SurfFeatureDetector::create();
        detector->detect(map,keypointsMap);
        detector->detectAndCompute(compare, noArray(), keypointsCompare, descriptorComp);

Это происходит, даже когда я использую пример кода из документации opencv (https://docs.opencv.org/3.4/d7/dff/tutorial_feature_homography.html). Я могу без проблем использовать другие платные функции, такие как SIFT. Я использую opencv4 и включаю следующие библиотеки:

#include "opencv2/core.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/features2d.hpp"
#include "opencv2/xfeatures2d.hpp"
#include "opencv2/xfeatures2d/nonfree.hpp"
#include "opencv2/imgproc.hpp"

Кто-нибудь видел эту проблему раньше и, возможно, знает решение? Спасибо

1 Ответ

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

Я обнаружил проблему, когда переустановил opencv на свой ноутбук. Кажется, что вам нужно правильно настроить cmake (указать путь для модулей и разрешить несвободные), когда вы создаете opencv с первой попытки заставить работать SURF и SIFT. Если вы этого не сделаете, вы не сможете исправить это, перезаписав старые файлы. Тогда SIFT будет работать, но не SURF по какой-то причине. Поэтому я удалил все на своем P C, а затем с самого начала выполнил настройку, и теперь все работает. Да, и еще убедитесь, что вы правильно добавили все в путь. Чрезвычайно полезное описание для установки opencv на windows 10: https://www.youtube.com/watch?v=x5EWlNQ6z5w Спасибо Grillteller и всем, кто это читал!

...