golang ошибка gocv при запуске go ./cmd/version/main.go - PullRequest
0 голосов
/ 04 августа 2020

Я новичок в Golang, и у меня возникли проблемы с установкой gocv. Я не знаю, погоду это невозможно узнать, но я использую Manjaro Linux в версии 5.19.3, текущая go - версия 1.14.2 и последняя, ​​но не менее важная g ccgo в версии 10.1.0 (amd64). Я установил gocv, как описано на https://gocv.io/getting-started/linux/

go get -u -d gocv.io/x/gocv
cd $GOPATH/pkg/mod/gocv.io/
make install

Если он работает правильно, должно отображаться следующее сообщение:

gocv version: 0.24.0
opencv lib version: 4.4.0
# gocv.io/x/gocv
In file included from features2d.cpp:1:
features2d.h:22:21: error: 'SIFT' is not a member of 'cv'
   22 | typedef cv::Ptr<cv::SIFT>* SIFT;
      |                     ^~~~
features2d.h:22:21: error: 'SIFT' is not a member of 'cv'
features2d.h:22:25: error: template argument 1 is invalid
   22 | typedef cv::Ptr<cv::SIFT>* SIFT;
      |                         ^
features2d.cpp: In function 'int* SIFT_Create()':
features2d.cpp:434:28: error: 'SIFT' is not a member of 'cv'; did you mean 'SIFT'?
  434 |     return new cv::Ptr<cv::SIFT>(cv::SIFT::create());
      |                            ^~~~
In file included from features2d.cpp:1:
features2d.h:22:28: note: 'SIFT' declared here
   22 | typedef cv::Ptr<cv::SIFT>* SIFT;
      |                            ^~~~
features2d.cpp:434:28: error: 'SIFT' is not a member of 'cv'; did you mean 'SIFT'?
  434 |     return new cv::Ptr<cv::SIFT>(cv::SIFT::create());
      |                            ^~~~
In file included from features2d.cpp:1:
features2d.h:22:28: note: 'SIFT' declared here
   22 | typedef cv::Ptr<cv::SIFT>* SIFT;
      |                            ^~~~
features2d.cpp:434:32: error: template argument 1 is invalid
  434 |     return new cv::Ptr<cv::SIFT>(cv::SIFT::create());
      |                                ^
features2d.cpp:434:38: error: 'cv::SIFT' has not been declared
  434 |     return new cv::Ptr<cv::SIFT>(cv::SIFT::create());
      |                                      ^~~~
features2d.cpp: In function 'KeyPoints SIFT_Detect(SIFT, Mat)':
features2d.cpp:443:9: error: base operand of '->' is not a pointer
  443 |     (*d)->detect(*src, detected);
      |         ^~
features2d.cpp: In function 'KeyPoints SIFT_DetectAndCompute(SIFT, Mat, Mat, Mat)':
features2d.cpp:460:9: error: base operand of '->' is not a pointer
  460 |     (*d)->detectAndCompute(*src, *mask, detected, *desc);
      |         ^~
Fehler: Prozess beendet mit Rückgabewert 2.

Я пытался найду решение в инте rnet, а я даже не понимаю в чем проблема. Я надеюсь, что кто-то может мне помочь. С уважением, Феликс

1 Ответ

0 голосов
/ 27 августа 2020

Алгоритм SIFT (масштабно-инвариантное преобразование признаков) - это запатентованный алгоритм, который требует, чтобы пользователь импортировал несвободный файл заголовка, если вам необходимо его использовать, как показано ниже:

#include <opencv2/nonfree/nonfree.hpp>

Однако патент срок действия уже истек. (OpenCV 4.4.0) Таким образом, этот пакет перемещен в основной репозиторий opencv (отметьте выделение релиза https://opencv.org/opencv-4-4-0/)

В результате репозиторий gocv, который использует SIFT, был обновлен до получите этот алгоритм из основного репозитория opencv, как показано ниже (в журнале изменений gocv v0.24.0: https://github.com/hybridgroup/gocv/commit/04b71cbb6d82e8c396ccbbf0d65b446a80a0e8fa)

typedef cv::Ptr<cv::SIFT>* SIFT;

Это строка обновленного кода, из-за которой вы потерпели неудачу для сборки. (Вы получите эту ошибку, только если не используете opencv 4.4.0, вы можете проверить MakeFile, который вы используете)

Чтобы решить эту проблему, вы можете попробовать получить / обновить репозиторий gocv снова сейчас, поскольку они обновили весь MakeFile, чтобы уже использовать opencv 4.4.0. Или вы можете просто вручную обновить свой MakeFile, чтобы изменить версию opencv на 4.4.0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...